Как получить набор результатов из SQL триггера сервера - PullRequest
0 голосов
/ 11 апреля 2020

Я делаю несколько проверок и проверок SQL Триггеры сервера, но мне не удалось получить пользовательский оператор выбора из триггера. Мне нужно получить его во временную таблицу или в некоторые переменные, как это сделать?

Структура таблицы:

create table Orders
(
    ID int identity(1,1), 
    OrderNo nvarchar(50), 
    Product nvarchar(100), 
    Quantity int
)

Мой триггер:

create trigger [dbo].[OrderInsertTrigger]
on [dbo].[Orders]    
instead of insert
as
begin
    set nocount on;

    -- Some Checks here for validation..  some codes..

    select 1 as result, 'insert is successful' as message return
end

Вставить запрос к тесту;

insert into Orders (OrderNo, Product, Quantity) 
    select 123, 'ice cream', 100 

Я пробовал использовать вспомогательные скобки (просто догадываясь, чтобы захватить выходные данные триггера), но не сработало;

 Declare @temp table(bit result, msg nvarchar(200))
 insert into @temp  
 from
 (insert into Orders(OrderNo,Product,Quantity) select 123, ''ice cream'', 100') 
as t

Я пытался что-то динамическое c SQL, но не сработало;

 Declare @temp table(bit result, msg nvarchar(200))
 insert into @temp  Exec('insert into Orders(OrderNo,Product,Quantity) select 123, ''ice cream'', 100')

Как можно захватить этот пользовательский оператор выбора из триггера? или это возможно?

РЕДАКТИРОВАТЬ

Моя цель на самом деле, я хочу сделать некоторые проверки перед операциями CRUD, чтобы предотвратить SQL ошибки, такие как проверка обнуляемости поля, проверка внешнего ключа, проверка диапазона значений или выборочная проверка в соответствии с потребностями клиента. Я хочу отразить свой пользовательский ответ клиенту с SQL сервера (может быть, от триггера или ???)

Итак, мой вопрос, как эффективно проводить проверки, проверки для слишком большого числа SQL Серверные столы в стати c или динамически c способом?

1 Ответ

2 голосов
/ 11 апреля 2020

Динамический запрос c SQL в вашем вопросе будет работать, если вы исправите синтаксическую ошибку в объявлении табличной переменной:

DECLARE @temp TABLE(result bit, msg nvarchar(200));
INSERT INTO @temp
    EXEC('insert into Orders(OrderNo,Product,Quantity) select 123, ''ice cream'', 100');
SELECT * FROM @temp;

Помните, что не следует возвращать наборы результатов из триггера и возможность сделать это будет удалена в будущем SQL Версия сервера . Могут быть более эффективные способы достижения sh конечного результата для этой xy задачи .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...