2016-11-07 28 views
-2

我有一個SQL Server INSTEAD OF INSERT觸發器,它填充我的表中的值。但是,當我運行一個INSERT語句,我得到SQL Server觸發器:在區分大小寫的數據庫中插入'無效的對象名'

無效的對象名稱插入「錯誤

現在我的數據庫排序規則設置爲區分大小寫的,所以我不知道是否該'插入'的情況是原因,但我試過插入,插入和插入。

我的觸發類似於:

CREATE TRIGGER UpdateID 
ON Personnel 
INSTEAD OF INSERT 
AS 
BEGIN 
    DECLARE @SQL nvarchar(4000)  
    DECLARE @NewID int = 100 --Will be auto generated 

    SET @SQL = 'INSERT INTO Personnel (AutoID, Firstname, Surname) 
       SELECT ' + CAST(@NewID AS nvarchar) + ', Firstname, Surname 
       FROM inserted' 
    EXECUTE (@SQL) 
END 
+7

爲什麼你使用動態SQL - 在這裏似乎沒有必要。 –

+1

不僅是不必要的,而且是錯誤的原因... – petelids

+1

爲什麼要在同一個表格觸發器的'Personnel'表中插入記錄?它會創建遞歸。 – Shell

回答

4

動態SQL創建一個新的「上下文」,其中的變量和表中調用代碼塊可能不可用。

inserted不可用,這並不奇怪。簡單的解決辦法是不使用動態SQL:

INSERT INTO Personnel (AutoID, Firstname, Surname) 
    SELECT CAST(@NewID AS nvarchar(255)), Firstname, Surname 
    FROM inserted; 

另外請注意,無論你使用一個字符類型,你應該始終使用的長度。默認長度因上下文而異。如果時間不夠長,那麼你的代碼將會有很難找到的錯誤。