2016-11-17 2 views
0

Я использую sqlserver, я создал Trigger для удаления из YTable, когда удалял повторяющиеся строки из Xtable. Примечание: YTable имеет внешний ключ из XTable как On_IDСоздание триггера для удаления из таблицы при удалении повторяющихся строк из другой связанной таблицы

Trigger Запрос

CREATE TRIGGER trgAfterDeletev4 ON XTable 

AFTER DELETE 
AS 
declare @empid int; 

select @empid=d.[On_ID] from deleted d; 

Delete from YTable 
where [On_ID]= @empid 
PRINT 'AFTER DELETE TRIGGER fired.' 

удалить повторяющиеся строки из XTable

WITH C AS(
    SELECT *, 
     RN = ROW_NUMBER()OVER(PARTITION BY [col1] ORDER BY [col2]) 
    FROM [Sourcing].[src].XTable 
) 
    DELETE FROM C WHERE RN > 1 

Результат

(0 строк (s)) ПОСЛЕ УДАЛЕНИЯ TRIGGER.

(1271060 строк (ы) пострадавших)

пожалуйста, что это неправильно этих запросов

большое спасибо

ответ

3

Заявление

select @empid=d.[On_ID] from deleted d 

не работает должным образом в случай, когда вы удаляете более одной записи от XTable, так как вы не можете разместить несколько Идентификаторы в единую целочисленную переменную.

Вы можете просто изменить ВЕЬЕТЕ в триггером для

Delete from YTable 
where [On_ID] in (select [On_ID] from deleted) 
+0

Он работал хорошо спасибо @Andy Корнеев – Elsayed

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