2016-01-07 2 views
0

Я новичок в SQL так, не кричите мне. У меня проблема с триггером, который предназначен для сбора последних вставленных данных и обновления.Catch Inserted ID от Trigger

create trigger ilgKodIsim on URTFIS instead of insert 
as 
SET NOCOUNT ON 
SET IDENTITY_INSERT URTFIS ON 

declare @id int; 
insert into URTFIS ([ID], [FISNO], [FISTAR], [URTTAR], [STATUS], [STOKID], [DEPOID], [BIRIMID], [MIKTAR], 
[BIRIM1KATSAYI], [BIRIM2KATSAYI], [BIRIM3KATSAYI], [FIREORAN], [SIPARISID], [PROJEID], [KUR_RAPOR], 
[GENELTOPLAM], [GENELTOPLAM_RAPOR], [OZELGRUP1], [OZELGRUP2], [OZELALAN1], [OZELALAN2], [OZELALAN3], [OZELALAN4], [OZELALAN5], 
[OZELALAN6], [OZELALAN7], [OZELALAN8], [OZELALAN9], [OZELALAN10], [OZELALAN11], [OZELALAN12], [OZELALAN13], 
[OZELALAN14], [OZELALAN15], [OZELALAN16], [OZELALAN17], [OZELALAN18], [OZELALAN19], [OZELALAN20], 
[ACIKLAMA], [BARKODID], [FATFISID], [MUHFISID], [SUBEID], [YETKIKODID], [OWN_URTFISID], [MASTER_URTFISID], 
[OTOMATIK_ALT_URUN], [GENELGRUP1], [GENELGRUP2], [GENELGRUP3], [GENELGRUP4], [GENELGRUP5], [ERP_LOTID], 
[ERP_LOT_CIKIS_GIRIS_HARID], [ERP_VARYANTID], [STKFISID], [STKFISHARID]) 

select 

[ID], [FISNO], [FISTAR], [URTTAR], [STATUS], [STOKID], [DEPOID], [BIRIMID], [MIKTAR], 
[BIRIM1KATSAYI], [BIRIM2KATSAYI], [BIRIM3KATSAYI], [FIREORAN], [SIPARISID], [PROJEID], [KUR_RAPOR], 
[GENELTOPLAM], [GENELTOPLAM_RAPOR], [OZELGRUP1], [OZELGRUP2],[OZELALAN1], [OZELALAN2], [OZELALAN3], [OZELALAN4], [OZELALAN5], 
[OZELALAN6], [OZELALAN7], [OZELALAN8], [OZELALAN9], [OZELALAN10], [OZELALAN11], [OZELALAN12], [OZELALAN13], 
[OZELALAN14], [OZELALAN15], [OZELALAN16], [OZELALAN17], [OZELALAN18], [OZELALAN19], [OZELALAN20], 
[ACIKLAMA], [BARKODID], [FATFISID], [MUHFISID], [SUBEID], [YETKIKODID], [OWN_URTFISID], [MASTER_URTFISID], 
[OTOMATIK_ALT_URUN], [GENELGRUP1], [GENELGRUP2], [GENELGRUP3], [GENELGRUP4], [GENELGRUP5], [ERP_LOTID], 
[ERP_LOT_CIKIS_GIRIS_HARID], [ERP_VARYANTID], [STKFISID], [STKFISHARID] 

from inserted 

SET @id = Scope_Identity() 

update URTFIS set OZELALAN2 = 'Deneme' where ID = @id 

SET IDENTITY_INSERT URTFIS OFF 

После того, как я проверил, значения не обновились. И я не могу понять.

+0

Тег dbms используется. (Совсем не похож на ANSI SQL.) – jarlh

+0

Почему бы вам это сделать - поскольку вы взяли на себя ответственность за вставку данных в базовую таблицу, нет необходимости «ВСТАВИТЬ», а затем «ОБНОВИТЬ» вновь вставленные строки (и обратите внимание, * rows *, так что скалярная переменная не будет работать для многострочной вставленной), просто измените 'OZELALAN2' в разделе' SELECT' вместо 'Deneme''. –

+0

На самом деле есть программное обеспечение, работающее. Когда пользователь добавляет некоторые данные в таблицу. Мне нужно внести некоторые изменения в эту таблицу. – Ahmetcan

ответ

0

Поскольку вы используете IDENTITY_INSERT, вы не получите новое значение для URTFIS.ID.

Просто используйте ID от inserted.

update URTFIS set OZELALAN2 = 'Deneme' where ID = SELECT TOP 1 Id FROM Inserted 

Или не вставить ID явно:

create trigger ilgKodIsim on URTFIS instead of insert 
as 
SET NOCOUNT ON 


declare @id int; 
insert into URTFIS ([FISNO], [FISTAR], [URTTAR], [STATUS], [STOKID], [DEPOID], [BIRIMID], [MIKTAR], 
[BIRIM1KATSAYI], [BIRIM2KATSAYI], [BIRIM3KATSAYI], [FIREORAN], [SIPARISID], [PROJEID], [KUR_RAPOR], 
[GENELTOPLAM], [GENELTOPLAM_RAPOR], [OZELGRUP1], [OZELGRUP2], [OZELALAN1], [OZELALAN2], [OZELALAN3], [OZELALAN4], [OZELALAN5], 
[OZELALAN6], [OZELALAN7], [OZELALAN8], [OZELALAN9], [OZELALAN10],  [OZELALAN11], [OZELALAN12], [OZELALAN13], 
[OZELALAN14], [OZELALAN15], [OZELALAN16], [OZELALAN17], [OZELALAN18],  [OZELALAN19], [OZELALAN20], 
[ACIKLAMA], [BARKODID], [FATFISID], [MUHFISID], [SUBEID], [YETKIKODID], [OWN_URTFISID], [MASTER_URTFISID], 
[OTOMATIK_ALT_URUN], [GENELGRUP1], [GENELGRUP2], [GENELGRUP3], [GENELGRUP4], [GENELGRUP5], [ERP_LOTID], 
[ERP_LOT_CIKIS_GIRIS_HARID], [ERP_VARYANTID], [STKFISID], [STKFISHARID]) 

select 

[FISNO], [FISTAR], [URTTAR], [STATUS], [STOKID], [DEPOID], [BIRIMID], [MIKTAR], 
[BIRIM1KATSAYI], [BIRIM2KATSAYI], [BIRIM3KATSAYI], [FIREORAN], [SIPARISID], [PROJEID], [KUR_RAPOR], 
[GENELTOPLAM], [GENELTOPLAM_RAPOR], [OZELGRUP1], [OZELGRUP2],[OZELALAN1], [OZELALAN2], [OZELALAN3], [OZELALAN4], [OZELALAN5], 
[OZELALAN6], [OZELALAN7], [OZELALAN8], [OZELALAN9], [OZELALAN10], [OZELALAN11], [OZELALAN12], [OZELALAN13], 
[OZELALAN14], [OZELALAN15], [OZELALAN16], [OZELALAN17], [OZELALAN18], [OZELALAN19], [OZELALAN20], 
[ACIKLAMA], [BARKODID], [FATFISID], [MUHFISID], [SUBEID], [YETKIKODID], [OWN_URTFISID], [MASTER_URTFISID], 
[OTOMATIK_ALT_URUN], [GENELGRUP1], [GENELGRUP2], [GENELGRUP3], [GENELGRUP4],  [GENELGRUP5], [ERP_LOTID], 
[ERP_LOT_CIKIS_GIRIS_HARID], [ERP_VARYANTID], [STKFISID], [STKFISHARID] 

from inserted 

SET @id = Scope_Identity() 

update URTFIS set OZELALAN2 = 'Deneme' where ID = @id 
+0

İ попытался, но я получил эту ошибку; ClassName: EDatabaseError Сообщение: обновление не выполнено. Найдено 0 записей. Я не могу понять эту ошибку. Он должен иметь некоторые данные. Спасибо, хотя. – Ahmetcan

+0

Тогда попробуйте другое решение в моем ответе. –

+0

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

0

Я бы догадаться, что вам нужно на самом деле больше вдоль линий:

create trigger ilgKodIsim on URTFIS 
after insert --not instead of 
as 
SET NOCOUNT ON 

update URTFIS set OZELALAN2 = 'Deneme' where ID IN (select ID from inserted) 

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

Попытка поставить «значение» вставленного столбца идентификации в скалярную переменную обречена на провал, так как можно написать многострочные операторы INSERT (действительно, есть пример одного в вашем исходном триггере). Триггер срабатывает только один раз, есть несколько строк в inserted и поэтому несколько значения идентичности только что были назначены.

+0

да, наконец, я могу добавить некоторые данные. Благодарю приятеля. – Ahmetcan

Смежные вопросы