如何在不使用RAISERROR()的情况下使T-SQL脚本失败?

Joe*_*moe 0 t-sql sql-server sql-server-2008

这就是我想要完成的事情:

在SQL Server代理作业的第一步中检查数据库是否为只读.如果是这种情况 - 退出工作.

所以我想我将使用"高级属性"作业步骤,并选择"退出作业报告成功"为"失败阳离子:"

但是如何在不使用RAISERROR()的情况下使T-SQL脚本失败?原因我不想使用RAISERROR()是因为需要成为sysadmin服务器角色的成员才能使用它.

我找到了相当丑陋的方法 - 从表中选择一些不存在的东西,脚本看起来像这样:

declare @DBIsRO int;

SET @DBIsRO= (SELECT is_read_only
FROM sys.databases
WHERE name = 'test')

IF @DBIsRO=1 
   select * from dd -- table dd doesn't exist in current database
Run Code Online (Sandbox Code Playgroud)

然而,这看起来像一个kludge,我正在寻找一个"正确"的方法.

dan*_*era 5

重读文档:

任何用户都可以指定从0到18的严重级别.从19到25的严重级别只能由sysadmin的成员指定...

你可以做:

raiserror( 'Readonly',16,1)
Run Code Online (Sandbox Code Playgroud)