#sql #sql-server #tsql #triggers
#sql #sql-server #tsql #триггеры
Вопрос:
Я пытаюсь вставить строки в таблицу, выбрав строки из другой таблицы. В таблице есть триггер, который обрабатывает все строки, вставленные с помощью курсора. но когда я выполняю insert, он обрабатывает только 1 строку, пока вставлено несколько строк. Вот код, который у меня есть прямо сейчас. Я что-то упустил?
INSERT INTO <table>(<columns>) VALUES
SELECT <columns>
FROM <table> WHERE <condition> ORDER BY <column>
ALTER TRIGGER <trgName>
ON <table>
AFTER INSERT
AS
BEGIN
declare cur_inserted cursor for select <col1>,<col2> from inserted
open cur_inserted
fetch next from cur_inserted into @var1,@var2
while @@fetch_status = 0
begin
---- LOGIC to process each row here
fetch next from cur_inserted into @schedule_nbr,@stn_cd
end
close cur_inserted
deallocate cur_inserted
END
Спасибо,
Jignesh
Комментарии:
1. Что делает ваша «ЛОГИКА для обработки каждой строки здесь»? Также, пожалуйста, опубликуйте полный код. Одна часть выполняет
into @schedule_nbr,@stn_cd
, а другаяinto @var1,@var2
. Похоже, это должно сработать, если это просто ошибка, допущенная при ее очистке перед публикацией.2. Предложение INSERT VALUES недопустимо при использовании SELECT . Это просто опечатка?
3. Привет, Мартин и Нил, извините за ошибку … оба просто опечатки. И это просто ошибка с моей логикой, я понял это через 2 часа .. извините, что потратил ваше время… Спасибо вам обоим.
4. Ваш код выглядит правильно для меня… вы УВЕРЕНЫ, что вставляется несколько строк? Вы можете попробовать записать значение @@ROWCOUNT в таблицу, чтобы убедиться.
5. На следующем шаге я перебираю эти строки и получаю несколько строк. Я только что отладил в Visual Studio. Проблема заключалась в том, что было вставлено несколько строк, но логика обработки, которую я написал в триггере для каждой новой строки, была неверной.