gpt4 book ai didi

c# - 返回从存储过程插入的记录数的可靠方法是什么

转载 作者:太空宇宙 更新时间:2023-11-03 16:40:09 25 4
gpt4 key购买 nike

我正在该表上使用 INSERT 触发器。一旦执行了触发器(如果满足条件,它就会更新表),这就是问题所在。

  int records = sc.ExecuteNonQuery(); // works ok if trigger does not update the record

如果我在存储过程本身中保留 SET NOCOUNT ON;,上面的代码总是返回 -1。如果我删除它,我会得到正确的结果,但如果触发器确实更新了记录,那么结果就是错误的。我有时会得到 10 或其他数字。我的触发器看起来像这样

UPDATE students 
SET status = 'Inactive'

FROM Inserted i
INNER JOIN students T2
ON i.sname = T2.sname
AND i.id <> t2.id

这意味着它可以返回多个记录(尤其是在测试用例中)。谁能告诉我什么是治愈?如果可以解决问题或任何更好的方法,我愿意使用 Functions。

谢谢

添加插入 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 输出这个触发器的结果而不是实际的存储过程,那么他有什么办法呢?可以以某种方式抑制其输出。

最佳答案

我会将 Try Catch block 添加到过程中,如果成功则返回 1,如果不成功则返回 0。

我还会调整触发器以提高效率,方法是仅更改处于事件状态且满足其他条件的触发器的状态。

UPDATE students      
SET status = 'Inactive'
FROM Inserted i
INNER JOIN students T2
ON i.sname = T2.sname
AND i.id <> t2.id
AND status <> 'inactive'

当您确实只需要更新一个事件行时,这可以避免您更新 1000 行。

关于c# - 返回从存储过程插入的记录数的可靠方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7849956/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com