我正在 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/