删除数据库中重复数据的几个方法 数据库的使用过程中由于程序方面的问题有时候会碰到重复数据,重复数据导致了数据库部分设置不能正确设置…… iTbulo . c omOZh1q
方法一iTbulo . c omOZh1q
declare @max integer,@id integer declare cur_rows cursor local for select 主字段,count(*) from 表名 group by 主字段 having count(*) > 1 open cur_rows fetch cur_rows into @id,@max while @@fetch_status=0 begin select @max = @max -1 set rowcount @max delete from 表名 where 主字段 = @id fetch cur_rows into @id,@max end close cur_rows set rowcount 0iTbulo . c omOZh1q
select distinct * from tableNameiTbulo . c omOZh1q
iTbulo . c omOZh1q
就可以得到无重复记录的结果集。iTbulo . c omOZh1q
如果该表需要删除重复的记录(重复记录保留1条),可以按以下方法删除iTbulo . c omOZh1q
select distinct * into #Tmp from tableName drop table tableName select * into tableName from #Tmp drop table #TmpiTbulo . c omOZh1q
发生这种重复的原因是表设计不周产生的,增加唯一索引列即可解决。iTbulo . c omOZh1q
2、这类重复问题通常要求保留重复记录中的第一条记录,操作方法如下 假设有重复的字段为Name,Address,要求得到这两个字段唯一的结果集iTbulo . c omOZh1q
select identity(int,1,1) as autoID, * into #Tmp from tableName select min(autoID) as autoID into #Tmp2 from #Tmp group by Name,autoID select * from #Tmp where autoID in(select autoID from #tmp2)iTbulo . c omOZh1q
最后一个select即得到了Name,Address不重复的结果集(但多了一个autoID字段,实际写时可以写在select子句中省去此列)iTbulo . c omOZh1q
更改数据库中表的所属用户的两个方法 大家可能会经常碰到一个数据库备份还原到另外一台机器结果导致所有的表都不能打开了,原因是建表的时候采用了当时的数据库用户…… iTbulo . c omOZh1q
iTbulo . c omOZh1q
--更改某个表iTbulo . c omOZh1q
exec sp_changeobjectowner 'tablename','dbo'iTbulo . c omOZh1q
--存储更改全部表iTbulo . c omOZh1q
CREATE PROCEDURE dbo.User_ChangeObjectOwnerBatch @OldOwner as NVARCHAR(128), @NewOwner as NVARCHAR(128) ASiTbulo . c omOZh1q
DECLARE @Name as NVARCHAR(128) DECLARE @Owner as NVARCHAR(128) DECLARE @OwnerName as NVARCHAR(128)iTbulo . c omOZh1q
DECLARE curObject CURSOR FOR select 'Name' = name, 'Owner' = user_name(uid) from sysobjects where user_name(uid)=@OldOwner order by nameiTbulo . c omOZh1q
OPEN curObject FETCH NEXT FROM curObject INTO @Name, @Owner WHILE(@@FETCH_STATUS=0) BEGIN if @Owner=@OldOwner begin set @OwnerName = @OldOwner + '.' + rtrim(@Name) exec sp_changeobjectowner @OwnerName, @NewOwner end -- select @name,@NewOwner,@OldOwneriTbulo . c omOZh1q
FETCH NEXT FROM curObject INTO @Name, @Owner ENDiTbulo . c omOZh1q
close curObject deallocate curObjectiTbulo . c omOZh1q
GOiTbulo . c omOZh1q
SQL SERVER中直接循环写入数据 没什么好说的了,大家自己看,有时候有点用处 iTbulo . c omOZh1q