sqlcmd -b 不会在出错时退出

Ban*_*iur 5 sql-server sqlcmd error-handling

我很困惑我应该如何使用 sqlcmd 的 -b 参数。我正在尝试为我的数据库编写简单的自动化脚本,并希望在出现任何错误时停止执行。我正在使用 SQLServer 2008r2。

为了测试,我调用了简单的脚本

sqlcmd -b -i test.sql
Run Code Online (Sandbox Code Playgroud)

test.sql 内容:

PRINT 'test1'; 
RAISERROR ('Error raised', 15, 15);
PRINT 'test2';
Run Code Online (Sandbox Code Playgroud)

我希望在第一次打印后我会看到错误消息并且脚本会停止。但是每次执行第二次打印时,我都会看到以下输出:

test1
消息 50000,级别 18,状态 15,服务器 TOMEK,第 3 行
错误引发
test2

我做错了什么?

Dan*_*man 8

-b参数适用于批处理,而不适用于脚本中的语句。如果您使用GO批处理终止符分隔每个语句,您将获得您期望的行为。

请记住,SQLCMD 一次将整批语句发送到 SQL Server 以供执行。如果需要,您将需要 T-SQL 控制流语句(包括 TRY/CATCH)来处理服务器端的错误。