是否可以在存储过程中插入类似数据集/数组的内容,然后在存储过程中有一个循环插入语句?我有一个项目,可以在表中插入15条记录。目前,我正在使用我的c#代码进行循环。但有时候15个记录中有1个不会被插入。我想做的事情是,当没有插入至少1时,回滚或删除是插入的记录。我不能在c#中进行回滚,所以这可能在我的sql存储过程中吗?你能给我举个例子吗?提前谢谢。
答案 0 :(得分:0)
一个完美的解决方案是表值参数。 C#确实支持使用它们。查看我之前的答案。
但是,由于您使用的是古老的技术(SQL 2000),因此不受支持。
帮自己一个忙,升级。
对此的唯一限制是某些应用程序依赖于SQL 2000的安全模型。在我的旧公司,我们有一个因此而无法升级的应用程序。而且,他们不愿意花钱。赶上22!
我想问题是有多少进程在调用这个存储过程。
您可以随时执行以下操作。
1 - 在C#应用程序中创建动态临时表。
2 - 使用C#
中的数据加载表格3 - 将动态登台表的名称传递给SPROC。
4 - 在交易中,执行以下操作
BEGIN TRAN
INSERT INTO [TAGET TABLE]
SELECT * FROM [STAGING TABLE];
IF (@@ERROR <> 0)
BEGIN
ROLLBACK;
RETURN;
END
COMMIT
5 - 最后但并非最不重要的是,删除动态说明表。
我不知道这是否会让你随处可见,因为c#应该支持交易。
带事务的ADONET C#程序示例
http://www.codeproject.com/Articles/10223/Using-Transactions-in-ADO-NET