Как исправить 'Sql Trigger для вставки, не работающей с объявить переменную' - PullRequest
0 голосов
/ 09 января 2019

Я пытаюсь вставить строки из одной таблицы в другую, используя триггер с объявленной переменной. Когда я запускаю код отдельно, он работает для вставки, но я хочу создать триггер и вернуть 0 строк

Это то, что я пытался

CREATE TRIGGER Final 
ON schedule
FOR INSERT
AS
BEGIN
    DECLARE @sql NVARCHAR(MAX);
    SET @sql = 'INSERT INTO Datatable (Name, SAP_ID, Enterprise_IDs, Queue,d) 
                    SELECT Name, SAP_ID, Enterprise_IDs, Queue, [' + 
CONVERT(NVARCHAR(MAX), DAY(GETDATE())) + '] AS d 
                    FROM schedule'

    EXEC (@sql) 
END

Я ожидаю, что строки должны быть вставлены в другую таблицу, но вставляются 0 строк

Ответы [ 2 ]

0 голосов
/ 09 января 2019

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

CREATE TRIGGER Final 
ON schedule
FOR INSERT
AS
BEGIN
    INSERT INTO Datatable (Name, SAP_ID, Enterprise_IDs, Queue,d) 
    SELECT Name, SAP_ID, Enterprise_IDs, Queue, CONVERT(NVARCHAR(MAX),DAY(GETDATE()))
    FROM inserted

END

UPDATE

просто выполнив эту часть

DECLARE @sql NVARCHAR(MAX);
    SET @sql = N'SELECT [' + convert(nvarchar(max),day(getdate())) + '] AS d '

    print @sql

    EXEC (@sql) 

вы увидите, что ваш скрипт выдает ошибку, так как [9] (если мы считаем сегодняшнюю дату) недопустимым столбцом, движок sql считает его столбцом из вашего расписания таблицы, избавьтесь от скобок, и он должен нормально работать

0 голосов
/ 09 января 2019

Я думаю, что schedule пусто. Вы не хотите вставлять строки из schedule. Вы хотите использовать inserted вместо:

CREATE TRIGGER Final ON schedule
FOR INSERT
AS
begin
    declare @sql nvarchar(max); 
    set @sql = N'
insert into Datatable(Name, SAP_ID, Enterprise_IDs,Queue,d) 
    select Name, SAP_ID, Enterprise_IDs, Queue, [@d]
    from inserted
';
    set @sql = replace(@sql, '@d', day(getdate());

    exec sp_executesql @sql;
end;

go

Написав это, я не уверен, разрешено ли inserted в динамическом SQL.

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