0

这就是我想要完成的:

在 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

但是,这似乎只是一个杂物,我正在寻找一种“适当”的方法。

4

2 回答 2

5

重读文档:

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

你可以做:

raiserror( 'Readonly',16,1)
于 2012-11-20T21:16:22.937 回答
0

我不想使用 RAISERROR() 的原因是因为需要成为 sysadmin 服务器角色的成员才能使用它。

好吧,如果那是真的,没有人会使用它。根本不是真的。规范说:

任何用户都可以指定从 0 到 18 的严重级别。从 19 到 25 的严重级别只能由 sysadmin 固定服务器角色的成员或具有 ALTER TRACE 权限的用户指定。

即使这是真的,您也可以使用代码签名来利用它。但根本没有必要。

于 2012-11-20T21:17:19.653 回答