2009-12-21 1 views
0

Я пытаюсь найти влияние выполнения инструкции DDL на удаленные и вставленные логические таблицы внутри триггера таблицы. У меня есть:Заявления DDL в отношении удаленных вставленных в DML-триггер

CREATE TRIGGER [Trigger52] 
ON [dbo].[Table1] 
FOR DELETE, INSERT, UPDATE 
AS 
BEGIN 
    create table inserted (c1 int) 
    select * from inserted       
END 

Когда он срабатывает, я ожидал получить сообщение об ошибке. Вместо этого он, похоже, полностью игнорирует инструкцию create table и выбирает строки, которые были вставлены.

Есть ли документация, описывающая это поведение или объяснение?

+1

Это указано. SQL Server предоставляет «вставленную» таблицу (при условии, что это SQL Server). Почему вы пытаетесь создать таблицу в триггере в первую очередь? –

+0

Избавьтесь от: create table insert (c1 int) ' –

ответ

0

Внутри триггеров всегда существуют две таблицы псевдонимов: inserted и deleted. См Using the inserted and deleted Tables:

SQL Server автоматически создает и управляет этими таблицами. Вы можете использовать эти временные резидентные таблицы , чтобы протестировать эффекты определенных модификаций данных и установить условия для действий триггера DML. Вы не можете напрямую изменить данные в таблицах или выполнить данные измерений (DDL) в таблицах .