在另一个SQL查询中使用声明的变量

时间:2018-10-23 08:09:46

标签: sql sql-server database

我想通过声明如下变量在另一个查询中使用插入查询的ID。但是第二个查询看不到声明的变量。如何在第二个插入查询中使用第一个插入的ID

DECLARE @myVariable table (PKProductVariantId INT)
INSERT INTO STProductVariant
(FKProductId,FKProductDetailValueId_,ProductVariantCode,IsActive,StockQuantity)
OUTPUT inserted.PKProductVariantId into @myVariable
values(1,1,'test',1,1) 

然后

insert into STBranchProductVariantRelation(FKProductVariant,FKBranch,IsActive)
values (@myVariable,1,1)

2 个答案:

答案 0 :(得分:0)

您要使用STProductVariant中插入行中的pk吗?试试这个:

INSERT INTO STProductVariant (...) VALUES (...);
SET @lastId := LAST_INSERT_ID();
INSERT INTO STBranchProductVariantRelation (FKProductVariant, FKBranch, IsActive)
VALUES (@lastId, 1, 1);

答案 1 :(得分:0)

您需要使用insert . . . select

insert into STBranchProductVariantRelation(FKProductVariant, FKBranch, IsActive)
    select t.PKProductVariantId, 1, 1
    from @myVariable t; 

我认为您通过将 table 变量命名为“变量”来混淆自己。然后,您会认为它是一个标量变量。

我将这段代码写为:

DECLARE @ids table (PKProductVariantId INT);

INSERT INTO STProductVariant
(FKProductId, FKProductDetailValueId_, ProductVariantCode, IsActive, StockQuantity)
    OUTPUT inserted.PKProductVariantId into @ids
    VALUES(1, 1, 'test', 1, 1); 

    insert into STBranchProductVariantRelation(FKProductVariant, FKBranch, IsActive)
        select i.PKProductVariantId, 1, 1
        from @ids i;