SQL Server使用SCOPE_IDENTITY()插入select命令

时间:2017-09-19 13:39:53

标签: sql sql-server tsql

您好,我有一个名为

的表
PERSO_DATA(Id,refPerso,,Col1,Col2,Col3,Col4,Col5) 

我有

PERSO_DATA_QUEUE(Id,refPersoData,refVideo) 

首先,我将数据插入PERSO_DATA,然后我将获取插入数据的Id并将其作为refPersoData插入到另一个表中。

INSERT INTO PERSO_DATA(refPerso,Col1,Col2,Col3,Col4,Col5)
        SELECT @refPerso,pa.Col1,pa.Col2,pa.Col3,pa.Col4,pa.Col5 FROM #PERSODATA pa
    SET @refPersoData=SCOPE_IDENTITY()

当我这样写的时候,我会插入所有数据,但不能为每个数据取得ID

INSERT INTO PERSO_DATA_QUEUE(refVideoQueue,refPersoData)
        SELECT @refVideoQueue,@refPersoData

所以上面的代码只添加一个。但是如果我有10个数据要插入PERSO_DATA我还需要插入PERSO_DATA_QUEUE表10数据和插入的ID。

我该怎么做?我无法找到解决方案。

提前致谢

2 个答案:

答案 0 :(得分:1)

试试这段代码:

CREATE TABLE #temp ([Id] [bigint] NOT NULL);

INSERT INTO PERSO_DATA(refPerso,Col1,Col2,Col3,Col4,Col5)
    OUTPUT INSERTED.Id
    INTO #temp (Id)
    SELECT @refPerso,pa.Col1,pa.Col2,pa.Col3,pa.Col4,pa.Col5 
        FROM #PERSODATA pa;

INSERT INTO PERSO_DATA_QUEUE(refVideoQueue,refPersoData)
    SELECT @refVideoQueue, Id
        FROM #temp;

答案 1 :(得分:-1)

解决方案可能是将游标或循环与任何迭代器(如临时表中的ROW_NUMBER())组合在一起。 然后 - 在其中使用SCOPE_IDENTITY()来获取创建的IDENTITY值。