如何在插入查询中使用输出变量

时间:2017-05-23 15:40:26

标签: tsql

我正在从我们的crm中插入记录到我们的erp。电话表使用人员表中的标识列。我需要插入人员记录并在PersonId中捕获值,该PersonId是一个标识列,然后使用该PersonId作为键将记录插入Phone表。我收到错误: Msg 137,Level 16,State 1,Line 16 必须声明标量变量" @ IdentityID"。 Msg 137,Level 16,State 1,Line 17 必须声明标量变量" @ IdentityID"。

--IdentityTable
CREATE TABLE [dbo].[People](
    [People_ID] [int] NOT NULL,
    [text] [nvarchar](50) NULL,
    [PersonId] [int] IDENTITY(1,1) NOT NULL
) ON [PRIMARY]

--Phone
CREATE TABLE [dbo].[Phone](
    [PersonId] [int] NOT NULL,
    [text] [nvarchar](50) NULL,
    [Number] [nchar](10) NULL
) ON [PRIMARY]


declare @IdentityID table (PersonId int);

INSERT INTO [Bridge].[dbo].[People]
           ([People_ID]
           ,[text])
           output Inserted.PersonId into @IdentityID
     VALUES
           (3,'row1'),
           (4,'row2');

INSERT INTO [Bridge].[dbo].[Phone]
           (PersonId
           ,[text]
           ,[Number])
     VALUES
           (@IdentityID,'row1'),
           (@IdentityID,'row2');     

Print 'IdentityID' + @IdentityID

Msg 137,Level 16,State 1,Line 16 必须声明标量变量" @ IdentityID"。 Msg 137,Level 16,State 1,Line 17 必须声明标量变量" @ IdentityID"。

1 个答案:

答案 0 :(得分:1)

输出将是tablevariable,您可以使用如下:

declare @IdentityID table (PersonId int);

INSERT INTO [dbo].[People]
           ([People_ID]
           ,[text])
           output Inserted.PersonId into @IdentityID(PersonId)
     VALUES
           (3,'row1'),
           (4,'row2');

INSERT INTO [dbo].[Phone]
           (PersonId
           ,[text]
           ,[Number])
          select PersonId,'row1', 1 from @IdentityID
          union all select PersonId,'row2', 2 from @IdentityID

select * from @IdentityID