T-SQL TRIGGER возвращает еще 1 «затронутых строк», чем ожидалось при вставке данных - PullRequest
0 голосов
/ 07 октября 2019

У меня есть таблица с дополнительным ключом. Перед вставкой я хочу проверить, существует ли этот вторичный ключ в другой таблице как первичный ключ.

Для этого я создал триггер в 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 возвращает не ожидаемый результати это плохая практика, продолжать это.

Заранее спасибо

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