Оператор DML не может иметь никаких включенных триггеров, если он содержит предложение OUTPUT без предложения INTO - PullRequest
0 голосов
/ 09 января 2020

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

В моей системе есть PowerApp с простой формой. При сохранении формы поля записываются в таблицу1. Затем я хочу создать триггер для table1, чтобы одно поле из каждой новой записи вставлялось в table2.

Несмотря на то, что в моем коде нет условия вывода, я получаю следующую ошибку:

Запрошенная операция недопустима. Ответ сервера: Microsoft SQL: В целевой таблице 'table1' инструкции DML не может быть никаких включенных триггеров, если инструкция содержит предложение OUTPUT без предложения INTO. внутреннее исключение: Microsoft SQL: целевая таблица 'table1' оператора DML не может иметь никаких включенных триггеров, если в операторе содержится предложение OUTPUT без предложения INTO.

Развертывание моего кода до следующего все равно выдает ту же ошибку:

ALTER TRIGGER [dbo].[FormatID] 
   ON  [dbo].[table1]
   AFTER INSERT
AS 
BEGIN

    INSERT INTO [dbo].[table2](origID) 
    VALUES (1)

END

Любые предложения, пожалуйста, сгорите, я чувствую, как будто я упускаю что-то очевидное ...

1 Ответ

1 голос
/ 09 января 2020

ваше приложение выдает / вставляет / удаляет значения выражения dml как результирующий набор. Это невозможно, когда на столе есть триггеры (цель dml)

create table dbo.table1(id int);
create table dbo.table2(origID int);
go

CREATE OR ALTER TRIGGER [dbo].[FormatID] 
   ON  [dbo].[table1]
   AFTER INSERT
AS 
BEGIN

    INSERT INTO [dbo].[table2](origID) 
    VALUES (1)

END;


--succeeds
insert into dbo.table1(id) 
values (1);
go

--fails
insert into dbo.table1(id) 
output inserted.id --output cannot be a resultset(in the void) because there is a trigger
values(1);

--succeeds
declare @outputtable table (id int);
insert into dbo.table1(id) 
output inserted.id into @outputtable(id)--output into a table
values(1);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...