同一SQL表中的部分重复数据
我有一个有20000个条目的表格 我需要复制“部分”数据,但要使用新的公司名称 该表有一个唯一的ID,它不是自动递增的,因此在每次插入期间,我需要找到MAX(UniqueID)并添加1 以下脚本可以工作,但性能很差同一SQL表中的部分重复数据,sql,sql-server,tsql,Sql,Sql Server,Tsql,我有一个有20000个条目的表格 我需要复制“部分”数据,但要使用新的公司名称 该表有一个唯一的ID,它不是自动递增的,因此在每次插入期间,我需要找到MAX(UniqueID)并添加1 以下脚本可以工作,但性能很差 DECLARE @RowCount AS INTEGER; SELECT @RowCount = COUNT(1) FROM [dbo].[TableAAA]; DECLARE @intFlag INT; SET @intFlag = 1; WHILE ( @intFla
DECLARE @RowCount AS INTEGER;
SELECT @RowCount = COUNT(1)
FROM [dbo].[TableAAA];
DECLARE @intFlag INT;
SET @intFlag = 1;
WHILE ( @intFlag <= @RowCount )
BEGIN
INSERT INTO [dbo].[TableAAA]
( UniqueID ,
company ,
Agent ,
Phone
)
SELECT TOP 1
( SELECT MAX(UniqueID) + 1
FROM [dbo].[TableAAA]
) ,
'New Company' ,
Agent ,
Phone
FROM [dbo].[TableAAA] c
WHERE c.companyid = 'Old Company'
AND c.phone NOT IN ( SELECT Phone
FROM [dbo].[TableAAA]
WHERE company = 'New Company' );
SET @intFlag = @intFlag + 1;
END;
将@RowCount声明为整数;
选择@RowCount=COUNT(1)
来自[dbo].[TableAAA];
声明@intFlag INT;
设置@intFlag=1;
而(@intFlag我将使用MAX(UniqueID)作为种子,然后在基于集合的方法中增加它
declare @Seed int = (select MAX(UniqueID) FROM [dbo].[TableAAA])
SELECT
ID = row_number() over (order by (select null)) + @Seed
'New Company',
Agent,
Phone
INTO
#Staging
FROM
[dbo].[TableAAA] c
WHERE
c.companyid = 'Old Company'
AND c.phone NOT IN ( SELECT Phone
FROM [dbo].[TableAAA]
WHERE company = 'New Company' )
INSERT INTO [dbo].[TableAAA]
(UniqueID,
company,
Agent,
Phone)
SELECT
ID,
[New Company],
Agent,
Phone
FROM #Staging
DROP TABLE #Staging
为什么不更新它以使列自动递增,这将解决问题。如果没有,您在UniqueID上有索引吗?还可以将not IN更改为左联接,并在phonetableID为null而不是not IN时使用,我们不能将字段更改为autoincrementSELECT TOP(@N)ROW_NUMBER()OVER()