在存储过程中循环插入查询

时间:2014-02-02 14:13:08

标签: c# sql-server arrays stored-procedures sql-server-2000

是否可以在存储过程中插入类似数据集/数组的内容,然后在存储过程中有一个循环插入语句?我有一个项目,可以在表中插入15条记录。目前,我正在使用我的c#代码进行循环。但有时候15个记录中有1个不会被插入。我想做的事情是,当没有插入至少1时,回滚或删除是插入的记录。我不能在c#中进行回滚,所以这可能在我的sql存储过程中吗?你能给我举个例子吗?提前谢谢。

1 个答案:

答案 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