2010-11-18 317 views
6

SQL Server 2008の64ビットDeveloper EditionをService Pack 1と共にインストールしています。 私は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))のようなマクロを使用する必要があります。問題ない。
しかし、あなたがしようとした場合の例:SQL Serverエージェント - 私自身のjob_idを取得

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)
[OK]を、今、ゼロから:0xE33FE637C10B3C49A6E958BB3EF06959で

PRINT N'$(ESCAPE_SQUOTE(JOBID))' 

結果が、JOB_IDが 37E63FE3-0BC1-493C-A6E9-58BB3EF06959
"N '" Iであります(JOBID)のNVARCHARへの暗黙の変換を行うと思います...
いいえ、私は(JOBID)のデータ型に気を配らなければならないと思います。中

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

結果:
付近に正しくない構文 '('(Microsoft SQL Serverの、エラーページ169分の168の著書 "SQL Server 2008の管理" で(JOBID)を使用する例もあります。 :102)
私は今、完全に混乱しているヘルプのすべての種類が評価され、誰かが良いアドバイスや解決策で私を助けてもらえ

敬具 ヘルムート

答えて

3

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

3

我々はトラブルワットを持っていました。。。これは最近、あなたがMSDNで見つけたルートには行きませんでした。その代わりに、dbo.sysjobsからjobidを直接(例とは反対に)リカバリした後、ジョブ内のジョブIDを使用して実行ステータスを確認しました(ジョブ状態が変更された場合は長い実行中ループから抜ける)。

declare @jobid uniqueidentifier 
SELECT @jobid = job_id from msdb.dbo.sysjobs where name = '[blah]' 
2

これは明らかに聞こえるかもしれないが、私は、クエリウィンドウでそれを実行する場合、私はあなたの最初のサンプル、から引用エラーが出ますが、私は、ジョブステップにそのスクリプトを貼り付けるとき、それは完璧に動作します。

これらのトークンは、ジョブステップ内でのみ使用できます。私たちがjobidトークンに引用符を期待していないことを考えると、ESCAPE_NONEは参照するたびに使用されます。

4

お返事ありがとうございます。問題は、ジョブステップで文を解析しようとしたことです。それから私はこのエラーを受けました。仕事をしている間は何の問題もありません。 私の非常に最良の解決策は、以下のようになります。

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

は今、あなたは@JobIDで扱うが、私の知る限りでは、今までは(255)charに常に変換する必要があります。 ユーザーstate_dbaがMSDNにありがとうございます。

関連する問題