选择要插入记录的主表的标识

时间:2013-01-18 05:24:29

标签: sql sql-server sql-server-2008-r2

我有一张桌子让我们说TableA。我创建了一个trigger,它在TableA中的记录的插入,更新或删除时触发,并在另一个表中插入记录,让我们说TableB。我现在在哪里找到困难的是stored procedures TableA scope_identity() inserted record TableA's TableB。当我从scope_identity()获取时,必须从TableA记录返回该记录。有什么方法可以解决这个问题吗?我只想NOT来自TableB,{{1}}来自{{1}}。等待您的宝贵回应。

提前致谢..

1 个答案:

答案 0 :(得分:1)

SCOPE_IDENTITY()应该在那种情况下工作,它应该作用于你的存储过程和插入到TableA,而不是在触发器中完成的插入。

CREATE TABLE [dbo].[TableA](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [TestColumn] [nvarchar](50) NULL
) ON [PRIMARY]

CREATE TABLE [dbo].[TableB](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [TestColumn] [nvarchar](50) NULL
) ON [PRIMARY]

CREATE TRIGGER [dbo].[TableA_AIDU]
   ON  [dbo].[TableA]
   AFTER INSERT,DELETE,UPDATE
AS 
BEGIN
    SET NOCOUNT ON;
    INSERT INTO TableB ( TestColumn )
    SELECT 'TableA Modified'
END

CREATE PROCEDURE [dbo].[sp_InsertToTableA]
    @ID INT OUTPUT  
AS
BEGIN
    SET NOCOUNT ON;
    INSERT TableA ( TestColumn )
    SELECT 'Insert from sp_InsertToTableA'
    SET @ID = SCOPE_IDENTITY()
END

存储过程从TableA返回ID,并按预期触发TableB插入。你确定你没有使用@@ IDENTITY代替SCOPE_IDENTITY()吗?