这就是我想要实现的目标:
检查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
然而,这看起来像是一个kludge,我正在寻找一种“正确”的方法。
答案 0 :(得分:5)
重读文档:
任何用户都可以指定从0到18的严重级别。 从19到25的严重级别只能由成员指定 系统管理员......
你可以这样做:
raiserror( 'Readonly',16,1)
答案 1 :(得分:0)
原因我不想使用RAISERROR()是因为需要成为sysadmin服务器角色的成员才能使用它。
如果那是真的,没有人会使用它。根本不是真的。 spec says:
任何用户都可以指定从0到18的严重级别。 从19到25的严重级别只能由成员指定 sysadmin固定服务器角色或具有ALTER TRACE权限的用户。
即使这是真的,您也可以使用code signing来利用它。但根本没有必要。