2010-11-18 19 views
6

Bir SQL Server 2008 64 bit Developer Edition yüklü Service Pack 1 çalıştırıyorum. SQL Server Agent işim var. Bu işin içinde kendi işimin job_id'ini almak istiyorum.
MSDN (http://msdn.microsoft.com/en-us/library/ms175575(v=SQL.100).aspx) üzerinde, iş adımlarında belirteçleri kullanmanın açıklamasını bulabilirsiniz. Vay, harika, bende aradığım şey bu! Sadece kullanın (JOBID).
SQL Server 2005 SP1'den beri makroyu $ (ESCAPE_NONE (JOBID)) gibi kullanmak zorundasınız. Sorun değil.
Ama örnek denerseniz:SQL Server Agent - kendi job_id'i alın

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

elde edersiniz:
yanlış sözdizimi yakın 'ESCAPE_SQUOTE'. (Microsoft SQL Server, Hata: 102)
Tamam, şimdi sıfırdan: 0xE33FE637C10B3C49A6E958BB3EF06959 içinde

PRINT N'$(ESCAPE_SQUOTE(JOBID))' 

sonuçları ancak job_id 37E63FE3-0BC1-493C-A6E9-58BB3EF06959
olan "N"" Ben (JOBID) 'in NVARCHAR'ına örtük bir dönüşüm sağladığını düşünüyorum ...
Tamam, sanırım (JOBID) veri türünü önemsemeliyim.

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

Sonuçlar:.
yanlış sözdizimi yakın '(' (Microsoft SQL Server, Hata sayfasında 168/169 tarihinde kitabında "SQL Server 2008 Yönetim" in (JOBID) kullanımına bir örnek de var :.. 102)
Şimdi tamamen kafam karıştı biri iyi tavsiye veya solüsyon ile bana yardımcı memnun Could yardım her türlü takdir

Saygılarımızla Helmut

cevap

3

Sadece ayrıştırıcının ne söylediğini unut - değişken çözünürlük çalışma zamanında yapılır. Ayrıştırıcı bunu bilmiyor.

3

Biz w sorun vardı. Bunu yakın zamanda aldınız ve MSDN'de bulduğunuz rotaya gitmediniz. Bunun yerine, jobid'i dbo.sys jobs'dan doğrudan ismiyle (örneğinizin tersi) kurtardık ve daha sonra işin içinde yürütme durumunu kontrol etmek için kullanmıştık (iş durumu değiştiyse döngüde uzun süre çalışmadan çıktık).

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

Bu açık gelebilir, ama ben bir sorgu penceresi bunu çalıştırırsanız Sanırım ilk numune alıntı hatası alıyorum, ama iş adımına o senaryoyu yapıştırın zaman gayet iyi çalışır.

Bu belirteçleri yalnızca iş adımları içinde kullanabilirsiniz. Ve, iş tanımındaki herhangi bir alıntı beklemediğimize göre, her başvurduğunuzda ESCAPE_NONE kullanırdım. Yanıtlarınız için

4

teşekkürler. Sorun şu ki, iş adımındaki ifadeyi ayrıştırmaya çalıştım. Sonra bu hatayı aldım. İşi yürütürken problem yok. Benim en iyi çözüm:

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

Şimdi @JobID ile idare, ancak bildiğim kadarıyla şimdiye kadar sen (255) char her zaman dönüştürmek zorundayız. MSDN numaralı telefon kullanıcısı sayesinde state_dba kullanıcısına teşekkür ederiz.