2013-01-18 75 views
1

我有一個表讓我們說TableA。我創建了一個trigger,它在TableA的插入,更新或刪除記錄中觸發,並在另一個表中插入記錄,讓我們說TableB。現在,我在哪裏發現難度是stored proceduresTableA的一部分,我將返回scope_identity()inserted record。必須從TableA's記錄中返回,而我從TableB得到記錄。有什麼辦法可以解決這個問題嗎?我只需scope_identity()TableANOTTableB。等待您的寶貴迴應。選擇要插入記錄的主表的標識

在此先感謝..

+0

請發佈您的SP和觸發代碼 – Raj

+0

這是一種罕見的情況,通常應返回TableA的最後插入的身份。 – TechDo

+1

像上面說的不能真正幫助你沒有看到代碼 – Jester

回答

1

SCOPE_IDENTITY()應該在這種情況下工作,它應該作用域爲您的存儲過程,並插入到表A,而不是在完成觸發插入。

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()嗎?

+0

謝謝..我在大多數地方使用@@ Identity(),但用scope_identity()取代他們很好.. .. :) – Dev

+0

沒問題,我從文檔中學到了一些新東西:) http://msdn.microsoft.com/en-us/library/ms190315.aspx –

相關問題