2012-08-29 98 views
0

我有一個插入存儲過程與增加Id(int)。我想採取Id並將其插入到另一個表中,也是插入存儲過程中的一個變量。SQL Server觸發器 - 從第一個插入存儲過程獲取變量?

我知道你可以做select from inserted,但如果我沒有錯,允許你從inserted行中選擇值。

有沒有辦法在執行存儲過程後繼續執行變量並將其傳遞給觸發器?

編輯:對不起,讓我包括我正在使用的存儲過程。表foo有一個自動增加的Id,我想要一個觸發器在存儲過程運行後將foo的Id和@mid插入到另一個表中。但是,你可以看到@mid沒有被插入到表foo中。

ALTER PROCEDURE [dbo].[foo] 
    @userName varchar(50), 
    @somefoo varbinary(max), 
    @mid int 
AS 
BEGIN 
    SET NOCOUNT ON; 

    INSERT INTO fooTable(UserName, SomeFoo) 
    VALUES (@userName, @somefoo); 

END 
+1

你能顯示你的代碼嗎? –

+2

'inserted'和'deleted'是表格,以便它們可以表示設置操作的結果。假設它們總是包含一行,設計一個觸發器通常是一個糟糕的計劃。插入的表格將包含「IDENTITY」列的值(如果有的話)。 – HABO

+0

可以添加代碼示例(或者可能是僞代碼示例)來說明您正在嘗試執行什麼操作? –

回答

1

插入的僞表格允許您選擇現在在表格中的值。被刪除的僞表格允許你選擇插入前發生在表中的值。既然你說插入proc我假設它不是插入/更新proc。我不清楚你想做什麼。你想觸發器複製標識字段和另一列?簡單。您希望觸發器複製標識字段和實際上未存儲在表中的proc參數?不可能 - 但如果這就是你想要的,那麼你可以在proc中做。

1)觸發:

Insert into foo (a, b) 
select my_identity, some_column 
from inserted 

2)PROC:

..do main insert... 
    insert into foo (a, b) 
    select scope_identity(), @some_parameter 
0

您可以使用表擴展屬性爲你的目的。

第1步:爲您的表定義擴展屬性。

enter image description here

步驟2:在存儲過程中插入到由你的參數定義的擴展屬性表格集之前。

EXEC sys.sp_updateextendedproperty @name=N'@ParameterName', @value='YourValue' 

第3步:在觸發器中獲取定義的擴展屬性並使用它。 使用sys.extended_properties表獲取定義的擴展屬性。

相關問題