6

Service Pack 1 がインストールされた SQL Server 2008 64 ビット Developer Edition を実行しています。SQL Server エージェント ジョブがあります。このジョブ内で、自分のジョブの job_id を取得したいと考えています。
MSDN ( http://msdn.microsoft.com/en-us/library/ms175575(v=SQL.100).aspx ) で、ジョブ ステップでのトークンの使用に関する説明を見つけることができます。うわー、素晴らしい、それが私が探しているものです!! (JOBID)を使用するだけです。
SQL Server 2005 SP1 以降、$(ESCAPE_NONE(JOBID)) のようなマクロを使用する必要があります。問題ない。
しかし、例を試してみると:

DECLARE @name NVARCHAR(128)
select @name =  name from msdb.dbo.sysjobs where job_id = $(ESCAPE_SQUOTE(JOBID))
PRINT @name


「ESCAPE_SQUOTE」付近の構文が正しくありません。(Microsoft SQL Server、エラー: 102)
さて、最初から:

PRINT N'$(ESCAPE_SQUOTE(JOBID))'  


「N」は、(JOBID) の NVARCHAR への暗黙的な変換を行うと思います...わかりました
、(ジョビッド)。書籍「SQL Server 2008 Administration」(168/169 ページ) には、(JOBID) の使用例もあります。

declare @jobid binary(16)
SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))

結果:
'(' 付近の構文が正しくありません。(Microsoft SQL Server、エラー: 102)
今、完全に混乱しています。どなたか、良いアドバイスや解決策を教えてください。あらゆる種類の助けをいただければ幸いです。

よろしくヘルムート

4

5 に答える 5

6

最近これに問題があり、MSDNで見つけたルートに進みませんでした。代わりに、名前でdbo.sysjobsから直接jobidを復元し(例の反対)、ジョブ内でそれを使用して実行ステータスを確認しました(ジョブの状態が変更された場合は長時間実行中のwhileループを終了します)。

declare @jobid uniqueidentifier
SELECT @jobid = job_id from msdb.dbo.sysjobs where name = '[blah]'
于 2010-11-18T11:14:39.643 に答える
4

回答ありがとうございます。問題は、ジョブステップでステートメントを解析しようとしたことです。次に、このエラーが発生しました。ジョブの実行中は問題ありません。私の最善の解決策は次のとおりです。

declare @JobID uniqueidentifier
SELECT @JobID = $(ESCAPE_NONE(JOBID));
PRINT 'My JobID is  ' + Convert(char(255), @JobID)  

現在は @JobID で処理していますが、私が知る限り、これまでは常に char(255) に変換する必要がありました。MSDNのユーザー state_dba に感謝します。

于 2010-11-18T12:07:14.490 に答える
3

パーサーが言っていることは忘れてください - 変数の解決は実行時に行われます。パーサーはそれについて知りません。

于 2010-11-18T12:24:04.163 に答える
2

これは当たり前のように聞こえるかもしれませんが、クエリウィンドウで実行すると、最初のサンプルから引用したエラーが発生しますが、そのスクリプトをジョブステップに貼り付けると完全に実行されます。

これらのトークンは、ジョブステップ内でのみ使用できます。また、jobidトークンに引用符が含まれることは想定されていないため、参照する場合は常にESCAPE_NONEを使用します。

于 2010-11-18T11:40:40.123 に答える