Я использую INSERT Trigger для этой таблицы. После запуска триггера (он обновляет таблицу, если выполняется условие), вот в чем проблема.
int records = sc.ExecuteNonQuery(); // works ok if trigger does not update the record
Приведенный выше код всегда возвращается -1, если я оставлю SET NOCOUNT ON;
в самой хранимой процедуре. Если я удаляю его, я получаю правильный результат, но если триггер обновляет запись, то неверный результат. Я иногда получаю 10 или другое число. Мой триггер выглядит так
UPDATE students
SET status = 'Inactive'
FROM Inserted i
INNER JOIN students T2
ON i.sname = T2.sname
AND i.id <> t2.id
Это означает, что он может возвращать более одной записи (особенно в тестовых случаях). Может кто-нибудь сказать мне, что такое лекарство? Я открыт для использования функций, если это решает проблему или любой другой подход.
Спасибо
Добавление вставки SP
CREATE PROCEDURE sp_InsertSudent
-- Add the parameters for the stored procedure here
@student_name varchar(25) = null,
@status varchar(20) = null,
@renew varchar(15) = null,
@edate datetime = null
AS
BEGIN
--SET NOCOUNT ON;
insert into students VALUES(@student_name,@status,@renew,@edate)
END
GO
Примечание. Я ищу ошибку, поскольку поля выбраны из Excel. если какое-либо поле имеет неправильный формат или не заполнено, Insert SP выдаст ошибку. Я должен передать эту ошибку пользователю.
Добавление фактического SP
Так что вся проблема в SP. Если я уберу его, все будет нормально. Вот мой актуальный SP
UPDATE CustomerTbl
SET [Account Status] = 'Inactive',
[End Date] = DateAdd(day,-1,[Supplier End Date]),
[EnrollmentStatus] = 'Waiting'
WHERE OET.[Account No] = (SELECT [Account No] FROM CustomerTbl WHERE id = @@identity)
AND id <> @@identity
Логика та же, что и выше, но изложена иначе. ExecuteNonQuery пропускает результат этого триггера, чем фактическая хранимая процедура, так что же он излечит? Может как-то подавить его вывод.