sql server 2012: Comment faire face à varbinary pour la variable @query dans send_dbmail?

Mon intention est de surveiller le process cdc à travers un proc stocké géré par un travail d'agent sql. Je cherche à voir si j'ai capturé des données depuis la dernière exécution du travail. IntervalHours représente le nombre d'heures écastings depuis la dernière exécution du lot. Voici l'extrait de code qui est la configuration de la décision notifier / ne pas notifier:

declare @FromLSN binary(10) declare @ToLSN binary(10) declare @BeginTime datetime declare @EndTime datetime declare @hasCurrentChanges int declare @SendLowFloorMessage bit select @BeginTime = dateadd(hh,-@IntervalHours,getdate()) SET @EndTime = GETDATE(); -- Map the time interval to a change data capture query range. SET @FromLSN = [myInstance].sys.fn_cdc_map_time_to_lsn('smallest greater than or equal', @BeginTime); SET @ToLSN = [myInstance].sys.fn_cdc_map_time_to_lsn('largest less than or equal', @EndTime); -- Return the count of the net changes occurring within the query window. SELECT @hasCurrentChanges = count(*) FROM [myInstance].cdc.fn_cdc_get_net_changes_dbo_CRM_POSTran(@FromLSN, @ToLSN, 'all'); 

– Voici la décision –

  IF isnull(@hasCurrentChanges,0) <= @LowFloor begin set @SendLowFloorMessage = 1; end 

– Voici la notification. C'est là que j'aurais besoin de @qry pour copyr la valeur de @FromLSN et @ToLSN dans le text de la requête pour qu'elle puisse s'exécuter. De quoi ai-je besoin pour lancer la valeur afin que cela réussisse?

  DECLARE @bdy nvarchar(1000); DECLARE @sbj nvarchar(50) DECLARE @MailRecipients VARCHAR(50) DECLARE @qry nvarchar(max) SET @MailRecipients = '[email protected]' --Send email with results of long-running jobs EXEC msdb.dbo.sp_send_dbmail @profile_name = @mailProfile ,@recipients = @MailRecipients ,@query = @qry ,@execute_query_database = 'InternalResource' ,@body = @bdy ,@subject = @sbj ,@attach_query_result_as_file = 1; 

Je suppose que vous avez un bon contrôle sur sp_send_dbmail et que vous ne savez pas comment créer un TSQL dynamic pour @query en utilisant les types de données varbinary. Voici une façon de convertir datatables en utilisant le DOM XML.

Voici une reference à mon site web montrant comment envoyer un email avec une pièce jointe pour 2008 R2.

http://craftydba.com/?p=1025 .

C'est presque la même chose pour 2012 – Books On Line.

http://technet.microsoft.com/en-us/library/ms190307.aspx .

L'exemple de code ci-dessous prend deux nombre hexadécimal et les convertit en un appel au cdc.fn_cdc_get_net_changes_.

http://msdn.microsoft.com/en-us/library/bb522511.aspx

 -- Sample data DECLARE @from_lsn VARBINARY(10); SET @from_lsn = 0x5BAA61E4C9B93F3F0682; DECLARE @to_lsn VARBINARY(10); SET @to_lsn = 0x5BAA61E4C9B93F3F0782; -- Display the results DECLARE @tsql VARCHAR(MAX); SELECT @tsql = 'SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department(' + char(39) + '0x' + CAST('' AS XML).value('xs:hexBinary(sql:variable("@from_lsn"))', 'VARCHAR(20)') + char(39) + ',' + char(39) + '0x' + CAST('' AS XML).value('xs:hexBinary(sql:variable("@to_lsn"))', 'VARCHAR(20)') + char(39) + + ',' + char(39) + 'all' + char(39) +');'; -- Show the data PRINT @tsql 

Voici la sortie de l'extrait.

 SELECT * FROM cdc.fn_cdc_get_net_changes_HR_Department ('0x5BAA61E4C9B93F3F0682','0x5BAA61E4C9B93F3F0782','all');