我有同样的需求,并找到了这个答案..
这将在公司表(comp)中创建一条记录,它抓取在公司表上创建的自动ID,并将其放入工作人员表(staff)中,以便可以将2个表链接起来,其中许多工作人员都属于一个公司。它适用于我的SQL 2008 DB,应适用于SQL 2005及更高版本。
==========================
CREATE PROCEDURE [dbo].[InsertNewCompanyAndStaffDetails]
@comp_name varchar(55) = 'Big Company',
@comp_regno nchar(8) = '12345678',
@comp_email nvarchar(50) = 'no1@home.com',
@recID INT OUTPUT
-' @recID'用于保存我们将要获取的公司自动生成的ID号
AS
Begin
SET NOCOUNT ON
DECLARE @tableVar TABLE (tempID INT)
-上面的行用于创建临时表,以保存自动生成的ID号以供以后使用。它只有一个字段'tempID',类型INT与'@recID'相同。
INSERT INTO comp(comp_name, comp_regno, comp_email)
OUTPUT inserted.comp_id INTO @tableVar
-已插入 ' OUTPUT。上面的'行用于从当前正在创建的记录的任何字段中获取数据。我们想要的数据是ID自动编号。因此,请确保为您的表输入正确的字段名称,我的名称是'comp_id'。然后将其放入我们之前创建的临时表中。
VALUES (@comp_name, @comp_regno, @comp_email)
SET @recID = (SELECT tempID FROM @tableVar)
-上面的行用于搜索我们之前创建的临时表,其中保存了我们所需的ID。由于此临时表中只有一条记录,只有一个字段,因此它将仅选择所需的ID号并将其放入' @recID '中。' @recID '现在拥有您想要的ID号,您可以像我在下面使用它一样使用它。
INSERT INTO staff(Staff_comp_id)
VALUES (@recID)
End
-所以你去了。您实际上可以在插入的“ OUTPUT.WhatEverFieldNameYouWant ”行中获取所需的内容,并在临时表中创建所需的字段,然后访问它以使用所需的内容。
多年来,我一直在寻找类似的东西,并进行了详细的细分,希望对您有所帮助。
OUTPUT INSERTED.ID
在桌子上激活触发器的情况下可能会产生问题