我在查询中有以下 2 个命令(插入和删除)。当我运行查询时,我收到一条错误消息:
字符串或二进制数据将被截断。
当我去检查源表时,我发现该表不存在。它被 drop 语句删除了。我以为第二条语句不会执行,因为第一条(插入)失败了。
我如何编写下面的代码才能使整个查询失败并且不会删除表,除非第一部分(插入)成功?
我需要使用 Begin、End 和 Go 吗?
INSERT INTO SomeTable
SELECT * FROM SomeOtherTable
DROP table SomeOtherTable
基本上,您需要测试插入是否成功。它要么成功并插入所有内容,要么失败并且不插入任何内容。像这样检查
@@ROWCOUNT
:如果需要,您可以将其包装在事务中或使用
GOTO
带有标签的。这完全取决于您要如何终止。有关选项和注意事项的完整列表,请参阅 Erland Sommarskog 的参考文章:
SQL Server 中的错误和事务处理
我会使用
XACT_ABORT
设置。如果发生任何错误,这将中止整个事务。