SQL Server 'Resume Next' 等效项

标签 sql sql-server vb.net t-sql

我正在 VB.net 中开发一个项目,该项目获取包含 T-SQL 的大型文本文件并针对本地 SQL 数据库执行它们,但我遇到了错误处理方面的问题。

我正在使用以下技术:

  • VB.net
  • 框架3.5
  • SQL Express 2005

我尝试执行的 SQL 大多是直接的,但我的应用程序完全不知道其中包含的架构或数据。例如:

UPDATE mytable SET mycol2='data' WHERE mycol1=1
INSERT INTO mytable (mycol1, mycol2) VALUES (1,'data')
UPDATE mytable SET mycol2='data' WHERE mycol1=2
INSERT INTO mytable (mycol1, mycol2) VALUES (1,'data')
UPDATE mytable SET mycol2='data' WHERE mycol1=3

上面是我正在执行的示例,但这些文件每个将包含大约 10,000 到 20,000 条语句。

我的问题是,当使用 sqlCommand.ExecuteNonQuery() 时,我收到一个异常,因为第二个 INSERT 语句将命中表上的主键约束。

我需要知道发生了这个错误并记录它,而且还处理任何后续语句。我尝试将这些语句包装在 TRY/CATCH block 中,但我无法找到处理错误的方法,然后继续处理其他语句。

查询分析器似乎以这种方式运行,但在使用 sqlCommand.ExecuteNonQuery() 时则不然。

那么,是否有一个相当于“Resume Next”的 T-SQL 或其他某种方式,我可以在不引入大量字符串处理的情况下完成此操作?

非常感谢任何帮助。

最佳答案

SQL Server 确实有 Try/Catch 语法。请参阅:

http://msdn.microsoft.com/en-us/library/ms175976.aspx

要在您的文件中使用此功能,您要么必须重写文件本身以使用 try/catch 语法换行每一行,要么您的代码必须以编程方式修改文件内容以换行每一行。

没有与“On Error Resume Next”等效的 T-SQL,为此感谢 Cthulhu。

关于SQL Server 'Resume Next' 等效项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1411057/

相关文章:

asp.net - sql查询修复表中的电话号码问题

php - 使用 ActiveRecord 和 Yii2 记录实际的 SQL 查询?

sql - Null 的参数化查询

sql-server - 将表达式转换为数据类型日期时间(Int64 到日期时间)时发生算术溢出错误

asp.net - 使用 '_' 字符时注释 ASP.Net 代码

c# - 什么是NullReferenceException,如何解决?

c# - 是否所有一次性对象都在 using block 中实例化?

sql - Netezza-根据另一列的顺序连接来自单列的不同值

sql - 如何使用 GO-MSSQLDB 驱动程序获取最后插入的 ID?

sql - 使用合并复制还原 Sql Server 2008 数据库时出错