自增列,菜鸟求助关于SQL自增列

求sql语句!!如何去除只有自增列不同其他列都相同的冗余数据

自增列,菜鸟求助关于SQL自增列

文章插图
假如这个表为 Test (id 自增列, 字段1,字段2,字段3)
SELECT
字段1, 字段2, 字段3, COUNT(1) AS 有多少重复
FROM
Test
GROUP BY
字段1,字段2,字段3
HAVING
COUNT(1) > 1
就是 只有自增列不同其他列都相同的
菜鸟求助关于SQL自增列
自增列,菜鸟求助关于SQL自增列

文章插图
SQL SERVER 2000 里自增列是不能修改的 。
你可以尝试以下方法,根据你的需要改进 。
--建一个没有自增列的表
create table ta(id int,name int)
insert ta select 1,2
union all select 1,31
union all select 1,32
union all select 1,33
union all select 1,34
union all select 1,35
union all select 1,36
union all select 1,37
union all select 1,38
union all select 1,39
--看一下这个表
select *
from ta
--生成一个新表,自增列令其全为1
select *,自编号=1 into # from ta
--看一下这个临时表
select * from #
--修改自增列,令其值为自增
declare @i int
set @i=0 --可以令自增列从1开始,如果@i=1,则自增列会从2开始,依此类推
update # set 自编号=@i,@i=@i+1
【自增列,菜鸟求助关于SQL自增列】--查询一下自增列的值
select * from #
drop table #
SqlServer Mysql数据库修改自增列的值及相应问题的解决方案
自增列,菜鸟求助关于SQL自增列

文章插图
SQL Server 平台修改自增列值
由于之前处理过sql server数据库的迁移工作,尝试过其自增列值的变更,但是通过SQL 语句修改自增列值,是严格不允许的,直接报错(无法更新标识列 '自增列名称‘) 。sql server我测试是2008、2012和2014,都不允许变更自增列值,我相信SQL Server 2005+的环境均不允许变更字段列值 。
如果非要在SQL Server 平台修改自增列值的,那就手动需要自增列属性,然后修改该列值,修改成功后再手动添加自增列属性 。如果在生成环境修改自增列的话,建议在空闲时间(零点以后,平台或网站使用的用户很少的时间段)来处理这类问题 。数据量大且多表关联的,那就通过T-SQL来变更 。该方法最大的缺点就是要通过手工辅助取消和添加自增属性的 。
还有一个方法,先将要修改的数据整理为T-SQL的插入脚本,再删除这批要修改的数据,在通过显示插入数据来实现 。这种方式适用于要变更不较少的单表记录,该方法到时比较灵活的 。
更简单的方法,那就是如果仅仅若干条,那就让运营人员重新发布信息,删除以前的数据 。
还有网上通过修过T-SQL语句取消自增属性,我在SQL Server 2005+环境测试均未通过,相应的T-SQL代码如下:EXEC sys.sp_configure@configname = 'allow updates', -- varchar(35)@configvalue = https://www.xysc168.com/guoxue/1; -- intEXEC sys.sp_configure@configname ='show advanced options' , -- varchar(35)@configvalue = https://www.xysc168.com/guoxue/1; -- intRECONFIGURE WITH OVERRIDE;GOUPDATE sys.syscolumnsSET colstat = 1WHERE id = OBJECT_ID(N'PrimaryKeyAndIdentityUpdateTestDataTable', 'U')AND name = N'ID'AND colstat = 1;UPDATE sys.columnsSET is_identity = 0WHERE object_id = OBJECT_ID(N'PrimaryKeyAndIdentityUpdateTestDataTable', 'U')AND name = N'ID'AND is_identity = 1;
执行后的结果如下:
MySQL 平台修改自增列值
mysql平台修改自增列值,有些麻烦的 。mysql中存在自增列,如果其引擎是myisam,则该列可以为独立主键列,也可以为复合主键列,即该列必须为主键的关联列;如果其引擎是innodb,则该列必须是独立主键列 。要直接修改两个自增列值对调变更,肯定是不行的 。