2011-01-26 54 views
2

我有一個而不是觸發器。我有一個變量的值。sql server而不是觸發器插入語句與變量和值插入

我想將值插入其中一列並使用插入的字段。這就是我試圖完成:

declare @someLocalVariable varchar(9) 

set @someLocalVariable = dbo.someLocalUDF() 

INSERT myTable (field1, field2, field3) 
VALUES (@someLocalVariable, (select field2, field3 from inserted)) 
+0

UDF在做什麼? – DForck42

回答

7
INSERT INTO myTable (
    field1, 
    field2, 
    field3 
) SELECT 
    @someLocalVariable, 
    field2, 
    field3 
FROM 
    INSERTED 

只要記住,如果這是一個批量插入觸發(即INSERTED有一個以上的記錄),所有記錄也將被插入到目標表。

(這正是它應該做恕我直言,但出於某種原因人經常忘記這一點。)

編輯

的OP忘了說他的問題真的什麼:發電唯一的主鍵值。那麼,在這種情況下,這樣做的一種方式可能是這樣的:

CREATE TRIGGER 
    dbo.InsteadOfInsertMyTable 
    ON MyTable 
    INSTEAD OF INSERT 
AS 
BEGIN 
    INSERT INTO myTable (
     primaryKeyField, 
     field2, 
     field3 
    ) SELECT 
     dbo.someUniqueValueGeneratorUDF(), 
     field2, 
     field3 
    FROM 
     INSERTED 
END 
GO 
+2

+1不知道爲什麼OP不會爲此使用默認值。 –

+0

@Martin:肯定的事情。 – rsenna

+0

我的udf增加了一個字符串主鍵。所以你是正確的,它不適用於批量插入。有沒有辦法使用udf值更新INSERTED,然後插入所有插入的內容? – tim