Sql server sql server 2012:如何处理send_dbmail中@query变量的varbinary?
我的目的是通过sql代理作业管理的存储过程来监视cdc进程。我正在查看自上次执行作业以来是否捕获了任何数据。IntervalHours表示自上次批处理运行以来的小时数。以下是用于设置notify/notify决策的代码段:Sql server sql server 2012:如何处理send_dbmail中@query变量的varbinary?,sql-server,Sql Server,我的目的是通过sql代理作业管理的存储过程来监视cdc进程。我正在查看自上次执行作业以来是否捕获了任何数据。IntervalHours表示自上次批处理运行以来的小时数。以下是用于设置notify/notify决策的代码段: declare @FromLSN binary(10) declare @ToLSN binary(10) declare @BeginTime datetime declare @EndTime datetime declare @hasCurren
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');
--这是决定--
我假设您对sp_send_dbmail有很好的处理能力,只是不知道如何使用varbinary数据类型为@query创建动态TSQL。下面是使用XMLDOM转换数据的一种方法 这里是我的网站的参考,展示了如何为2008 R2发送带有附件的电子邮件 这与2012年几乎相同——在线图书 下面的示例代码采用两个十六进制数,并将它们转换为对cdc.fn\u cdc\u get\u net\u changes的调用 下面是代码段的输出
SELECT *
FROM cdc.fn_cdc_get_net_changes_HR_Department
('0x5BAA61E4C9B93F3F0682','0x5BAA61E4C9B93F3F0782','all');
谢谢@CraftyDBA!:)我真的很感激你的迅速反应。
DECLARE @bdy nvarchar(1000);
DECLARE @sbj nvarchar(50)
DECLARE @MailRecipients VARCHAR(50)
DECLARE @qry nvarchar(max)
SET @MailRecipients = 'paula.ditallo@gmail.com'
--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;
-- 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
SELECT *
FROM cdc.fn_cdc_get_net_changes_HR_Department
('0x5BAA61E4C9B93F3F0682','0x5BAA61E4C9B93F3F0782','all');