SQL 服务器中 Dynamic Pivot 的电子邮件结果
Email Results of Dynamic Pivot in SQL Server
*****EDIT*****
The problem resulted from using a temp table. Therefore this post was marked as a duplicate.
我编写了一个动态选择数据透视表列的查询。当我像这样执行查询时查询工作正常 EXEC sp_executesql @DynamicPivotQuery
动态枢轴看起来像这样(有效):
DECLARE @DynamicPivotQuery AS nvarchar(MAX)
DECLARE @PivotColumnNames AS nvarchar(MAX)
DECLARE @PivotSelectColumnNames AS nvarchar(MAX)
SELECT @PivotColumnNames = UPPER(ISNULL(@PivotColumnNames + ',','')
+ QUOTENAME(CSR)) FROM (SELECT DISTINCT CSR FROM #stats) AS CSRs
SELECT @PivotSelectColumnNames =
UPPER(ISNULL(@PivotSelectColumnNames + ',','')
+ 'ISNULL(' + QUOTENAME(CSR) + ', 0) AS '
+ QUOTENAME(CSR))
FROM (SELECT DISTINCT CSR FROM #stats) AS CSRs
SET @DynamicPivotQuery =
N'SELECT Category, ' + @PivotSelectColumnNames + '
FROM #stats
PIVOT (
MAX([COUNT])
FOR CSR IN (' + @PivotColumnNames + ')) as PivotTable'
我想将这些结果作为 SQL 服务器代理作业的一部分通过电子邮件发送。
当我像下面那样执行 sp_send_dbmail 时,它会抛出一个错误:
EXEC msdb.dbo.sp_send_dbmail
@profile_name='donotreply'
,@recipients ='****@****.com'
,@query= @DynamicPivotQuery
,@subject= 'Weekly Stats for New Sales, Winbacks, and TPV by Reps'
,@attach_query_result_as_file=1
,@query_attachment_filename='Customer Service Report.csv'
,@query_result_separator=',' --enforce csv
,@query_result_no_padding=1 --trim
,@query_result_width=32767 --stop wordwrap
这是它抛出的错误:
Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 517
Query execution failed: Msg 208, Level 16, State 1, Server CV-SQL2012\CVOSSQL, Line 1
Invalid object name '#stats'.
我已经尝试使用更简单的查询来代替@DynamicPivotQuery 来执行电子邮件 SP,并且成功了。
感谢阅读
您需要在创建临时 table 的同一动态上下文中执行 sendmail
。
或者切换到全局临时 table 或永久 table。
*****EDIT*****
The problem resulted from using a temp table. Therefore this post was marked as a duplicate.
我编写了一个动态选择数据透视表列的查询。当我像这样执行查询时查询工作正常 EXEC sp_executesql @DynamicPivotQuery
动态枢轴看起来像这样(有效):
DECLARE @DynamicPivotQuery AS nvarchar(MAX)
DECLARE @PivotColumnNames AS nvarchar(MAX)
DECLARE @PivotSelectColumnNames AS nvarchar(MAX)
SELECT @PivotColumnNames = UPPER(ISNULL(@PivotColumnNames + ',','')
+ QUOTENAME(CSR)) FROM (SELECT DISTINCT CSR FROM #stats) AS CSRs
SELECT @PivotSelectColumnNames =
UPPER(ISNULL(@PivotSelectColumnNames + ',','')
+ 'ISNULL(' + QUOTENAME(CSR) + ', 0) AS '
+ QUOTENAME(CSR))
FROM (SELECT DISTINCT CSR FROM #stats) AS CSRs
SET @DynamicPivotQuery =
N'SELECT Category, ' + @PivotSelectColumnNames + '
FROM #stats
PIVOT (
MAX([COUNT])
FOR CSR IN (' + @PivotColumnNames + ')) as PivotTable'
我想将这些结果作为 SQL 服务器代理作业的一部分通过电子邮件发送。
当我像下面那样执行 sp_send_dbmail 时,它会抛出一个错误:
EXEC msdb.dbo.sp_send_dbmail
@profile_name='donotreply'
,@recipients ='****@****.com'
,@query= @DynamicPivotQuery
,@subject= 'Weekly Stats for New Sales, Winbacks, and TPV by Reps'
,@attach_query_result_as_file=1
,@query_attachment_filename='Customer Service Report.csv'
,@query_result_separator=',' --enforce csv
,@query_result_no_padding=1 --trim
,@query_result_width=32767 --stop wordwrap
这是它抛出的错误:
Msg 22050, Level 16, State 1, Line 0
Error formatting query, probably invalid parameters
Msg 14661, Level 16, State 1, Procedure sp_send_dbmail, Line 517
Query execution failed: Msg 208, Level 16, State 1, Server CV-SQL2012\CVOSSQL, Line 1
Invalid object name '#stats'.
我已经尝试使用更简单的查询来代替@DynamicPivotQuery 来执行电子邮件 SP,并且成功了。
感谢阅读
您需要在创建临时 table 的同一动态上下文中执行 sendmail
。
或者切换到全局临时 table 或永久 table。