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までの重大度レベルは、sysadminのメンバーのみが指定できます...

できるよ:

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

RAISERROR()を使用したくない理由は、RAISERROR()を使用するには、sysadminサーバーロールのメンバーである必要があるためです。

それが本当なら、誰もそれを使うことはないでしょう。単に真実ではありません。仕様によると:

0から18までの重大度レベルは、すべてのユーザーが指定できます。19〜25の重大度レベルは、sysadmin固定サーバーロールのメンバーまたはALTERTRACE権限を持つユーザーのみが指定できます。

それが真実であるとしても、コード署名を使用してそれを活用することができます。しかし、単に必要ではありません。

于 2012-11-20T21:17:19.653 に答える