我在测试数据库中有一张表,当运行INSERT脚本进行设置时,显然有人对它有些不满意。模式如下所示:
ID UNIQUEIDENTIFIER TYPE_INT SMALLINT SYSTEM_VALUE SMALLINT NAME VARCHAR MAPPED_VALUE VARCHAR
它应该有几十行。它大约有200,000,其中大多数是重复的,其中TYPE_INT,SYSTEM_VALUE,NAME和MAPPED_VALUE完全相同,而ID不相同。
现在,我可能可以编写一个脚本来清理此问题,该脚本在内存中创建一个临时表,用于INSERT .. SELECT DISTINCT获取所有唯一值,TRUNCATE原始表,然后将所有内容复制回去。但是,有没有更简单的方法来执行此操作,例如DELETE在WHERE子句中进行特殊查询?
INSERT .. SELECT DISTINCT
TRUNCATE
DELETE
WHERE
您没有提供表名,但我认为类似的方法应该可行。只留下恰好具有最低ID的记录。您可能要先使用ROLLBACK进行测试!
BEGIN TRAN DELETE <table_name> FROM <table_name> T1 WHERE EXISTS( SELECT * FROM <table_name> T2 WHERE T1.TYPE_INT = T2.TYPE_INT AND T1.SYSTEM_VALUE = T2.SYSTEM_VALUE AND T1.NAME = T2.NAME AND T1.MAPPED_VALUE = T2.MAPPED_VALUE AND T2.ID > T1.ID ) SELECT * FROM <table_name> ROLLBACK