2016-11-07 1 views
-2

У меня есть триггер SQL Server INSTEAD OF INSERT, который заполняет значения в моей таблице. Но когда я бегу оператор вставки, я получаю ошибку, чтоТриггер SQL Server: недопустимое имя объекта «вставлено» в чувствительной к регистру базе данных

Недопустимое имя объекта «вставленный»

Теперь моя сверка базы данных установлено, чтобы быть чувствительны к регистру, поэтому я не уверен, является ли причина «вставлена» является причиной, но я попытался вставлен, INSERTED и Inserted.

Мой триггер взгляд что-то вроде:

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

Почему вы вставляете запись в таблицу «Персонал» на ту же триггер таблицы? Это создаст рекурсию. – Shell

ответ

4

Dynamic SQL создает новый «контекст», где переменные и таблицы в блоке вызова кода могут быть недоступны.

Не удивительно, что inserted не доступен. Простое решение не использовать динамический SQL:

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

Также обратите внимание, что всякий раз, когда вы используете тип персонажа, вы должны всегда использовать длину. Длина по умолчанию зависит от контекста. Если этого недостаточно, то ваш код будет иметь труднодоступные ошибки.

 Смежные вопросы

  • Нет связанных вопросов^_^