我正在尝试复制现有的表数据,同时保持特定列的值唯一。 我决定使用的想法:
理论上,它可以使KEY列值保持唯一:
CREATE PROC CopyData
AS
/*Creates TempTable with columns as in MyActualTable*/
select top 0 *
into #TempTable
from MyActualTable
DECLARE @MAX_KEY INT
/*Selects max value from KEY column of MyActualTable*/
SELECT TOP 1 @MAX_KEY=KEY
FROM MyActualTable
ORDER BY KEY DESC
INSERT INTO #TempTable SELECT * FROM MyActualTable
/*Suppusedly should add @MAX_KEY value to every inserted KEY value*/
INSERT INTO MyActualTable SELECT @MAX_KEY+KEY
,[Column1]
,[Column2]
FROM #TempTable
DROP TABLE #TempTable
GO
来自MyActualTable的数据已插入TempTable,但没有新行插入MyActualTable,没有错误。
我对SQL不是很有经验,所以如果你有另一个解决方案而不是这个 - 请与我分享。
答案 0 :(得分:2)
你不需要任何临时表
SELECT @MAX_KEY= MAX(KEY) FROM MyActualTable
INSERT INTO MyActualTable
SELECT @MAX_KEY+KEY
,[Column1]
,[Column2]
FROM MyActualTable