复制表数据并保持一个值唯一

时间:2018-02-15 17:16:33

标签: sql tsql

我正在尝试复制现有的表数据,同时保持特定列的值唯一。 我决定使用的想法:

  1. 使用MyActualTable所需的所有列创建TempTable;
  2. 从MyActualTable计算@MAX_KEY值(来自我需要保持值唯一的列);
  3. 将TempTable中的数据插回MyActualTable,同时将@MAX_KEY添加到TempTable中的每个KEY。
  4. 理论上,它可以使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不是很有经验,所以如果你有另一个解决方案而不是这个 - 请与我分享。

1 个答案:

答案 0 :(得分:2)

你不需要任何临时表

SELECT @MAX_KEY= MAX(KEY) FROM MyActualTable

INSERT INTO MyActualTable 
SELECT @MAX_KEY+KEY
  ,[Column1]
  ,[Column2]
FROM MyActualTable