У меня есть таблица с дополнительным ключом. Перед вставкой я хочу проверить, существует ли этот вторичный ключ в другой таблице как первичный ключ.
Для этого я создал триггер в T-SQL для этой таблицы. Вот оно:
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER TRIGGER [dbo].[trg_tb_repair_order_before]
ON [dbo].[tb_repair_order]
INSTEAD OF INSERT
AS
BEGIN
DECLARE @or_code NVARCHAR(50)
DECLARE @or_designation NVARCHAR(300)
DECLARE @or_comment NVARCHAR(3000)
DECLARE @code_customer NVARCHAR(50)
DECLARE cur_tb_repair_order_before CURSOR FOR
SELECT or_code, or_designation, or_comment, code_customer
FROM inserted
OPEN cur_tb_repair_order_before
FETCH NEXT FROM cur_tb_repair_order_before INTO @or_code, @or_designation, @or_comment, @code_customer
WHILE @@FETCH_STATUS = 0
BEGIN
IF ((SELECT Count(*) FROM tb_customer WHERE code = @code_customer) > 0)
BEGIN
IF ((SELECT COUNT(*) FROM inserted) > 0)
BEGIN
INSERT INTO tb_repair_order (or_code, or_designation, or_comment, code_customer)
VALUES (@or_code, @or_designation, @or_comment, @code_customer)
END
END
FETCH NEXT FROM cur_tb_repair_order_before INTO @or_code, @or_designation, @or_comment, @code_customer
END
CLOSE cur_tb_repair_order_before
DEALLOCATE cur_tb_repair_order_before
END
Все хорошо, этот триггер работает отлично.
Проблема в количестве вставленных строк
Здесь результат неверныйвторичный ключ
Как мы видим, SQL возвращает "затронутые 1 строки", но в таблицу ничего не вставлено ...
Вот результат для хорошего вторичного ключа
И здесь SQL возвращает «затронутые 2 строки».
Если кто-то может объяснить, как я могу вернуть правильный результат, потому что в моем коде C # функция ExecuteNonQuery
возвращает не ожидаемый результати это плохая практика, продолжать это.
Заранее спасибо