작동버젼 : MSSQL 2000 이상
사용방법 : []안의 내용 수정 후 사용
주의사항 : 만일의 경우를 위하여 테이블을 SELECT INTO 등으로 백업 후 사용하며
               IDENTITY컬럼이 이미 있는 경우 임시 테이블에 값을 넣어 처리 후 대체
설      명 : 중복되는 ROW중 IDENTITY컬럼값이 가장 작은 녀석만 남고 삭제 하는 쿼리기 때문에
               원하는 순서로 정렬된 Identity 컬럼 추가 을 참조하여 남아야 할 키 값의 IDENTITY값을 가장 작게 만들것!



DECLARE @TableName sysname
DECLARE @KeyColumns varchar(256)

SET @TableName = '[테이블명]';
SET @KeyColumns = '[기본키컬럼명1],[기본키컬럼명2],[기본키컬럼명3]';


DECLARE @Query nvarchar(4000);

SET @Query = N'ALTER TABLE ' + @TableName + ' ADD TempKeyColumn int IDENTITY(1,1)';
EXECUTE sp_executesql @Query;

SET @Query = N'DELETE ' + @TableName + ' WHERE TempKeyColumn NOT IN (SELECT MIN(TempKeyColumn) AS TempKeyColumn FROM ' + @TableName + ' GROUP BY ' + @KeyColumns + ')';
EXECUTE sp_executesql @Query;


SET @Query=N'ALTER TABLE ' + @TableName + ' DROP COLUMN TempKeyColumn;';
EXECUTE sp_executesql @Query;

GO


Posted by Mr.Jo :