Je suis en cours d'exécution d'une édition de développeur SQL Server 2008 64 bits avec Service Pack 1 installé.
J'ai un travail d'agent SQL Server. Dans ce travail, je veux obtenir le job_id de mon propre travail.
Sur msdn ( http://msdn.microsoft.com /en-us/Library/ms175575(v=SQL.100).aspx ) Vous pouvez trouver une description d'utiliser des jetons dans les étapes du travail. Wow, génial, c'est ce que je cherche !! Il suffit d'utiliser (Jobid).
Étant donné que SQL Server 2005 SP1, vous devez utiliser Macro comme $ (Escape_none (Jobid)). Pas de problème.
Mais si vous essayez l'exemple:
declare @jobid binary(16) SELECT @jobid =Convert(Uniqueidentifier,$(ESCAPE_NONE(JOBID)))
5 Réponses :
Nous avons eu des problèmes avec cela récemment et nous ne sommes pas allé l'itinéraire que vous avez trouvé dans MSDN. Au lieu de cela, nous avons récupéré le JOBID à partir de DBO.SYSJOBS par son nom directement (le contraire de votre exemple), puis utilisé dans le travail pour vérifier l'état d'exécution (sortie de longue durée pendant la boucle si l'état d'emploi avait changé).
declare @jobid uniqueidentifier SELECT @jobid = job_id from msdb.dbo.sysjobs where name = '[blah]'
Cela peut sembler évident, mais j'obtiens l'erreur que vous avez citée à partir de votre premier échantillon, si je l'exécute dans une fenêtre de requête em>, mais cela fonctionne parfaitement quand je colle ce script dans une étape de travail . P>
Vous ne pouvez utiliser que ces jetons dans les étapes du travail. Et, étant donné que nous ne nous attendions à aucune citations dans le jeton Jobid, j'utiliserais Escape_none chaque fois que vous le référez. P>
Merci pour vos réponses. Le problème est que j'ai essayé d'analyser la déclaration dans l'étape du travail. Ensuite, j'ai eu cette erreur. En exécutant le travail, il n'y a pas de problème. Ma meilleure solution est la meilleure solution:
declare @JobID uniqueidentifier SELECT @JobID = $(ESCAPE_NONE(JOBID)); PRINT 'My JobID is ' + Convert(char(255), @JobID)
oublier juste ce que le parseur dit - la résolution variable est effectuée au moment de l'exécution. L'analyseur ne sait pas à ce sujet. P>
Pour ceux qui ont besoin d'une méthode alternative pour obtenir votre propre identifiant de travail sans macros, par exemple, à partir d'une procédure stockée qui appelle une étape de travail. J'ai trouvé ce qui suit ici
DECLARE @SQL NVARCHAR(72), @jobID UNIQUEIDENTIFIER, @jobName SYSNAME IF SUBSTRING(APP_NAME(),1,8) = 'SQLAgent' BEGIN SET @SQL = 'SET @guid = CAST(' + SUBSTRING(APP_NAME(), 30, 34) + ' AS UNIQUEIDENTIFIER)' EXEC sp_executesql @SQL, N'@guid UNIQUEIDENTIFIER OUT', @guid = @jobID OUT SELECT @jobName = name FROM msdb..sysjobs WHERE job_id = @jobID END