[英]Saving the result of a SQL query into a local SQL variable
我有以下代码无法正常工作:
DECLARE @MySelect varchar(max), @MyRecipients varchar(max), @MyId
char(4),@MyResult varchar(max);
SET @MyId = '1';
SET @MySelect = 'SELECT SQL_Script FROM AutoSendMail.dbo.A01_St WHERE
ID =' + @MyId;
USE msdb
EXEC sp_send_dbmail
@profile_name='Operator',
@recipients='Mail@test.com',
@subject='Mail test',
@body= 'This is a test-mail',
@mailitem_id='1',
@query= @MyResult,
@attach_query_result_as_file = 1
我需要将选择查询的结果: @MySelect
到变量@MyResult
,因为我需要通过Mail发送SELECT
的结果。 但我找不到一种方法可以做到这一点。 查询应返回单个字符串值。
您可以声明表变量,在其中插入执行查询的结果,然后选择结果变量:
DECLARE @t TABLE(SQL_Script varchar(max))
INSERT INTO @t EXEC(@MySelect)
SELECT TOP 1 @MyResult = SQL_Script FROM @t
您还可以将sp_executesql
过程与输出参数一起使用,例如:
SET @MyId = '1';
SET @MySelect = 'SELECT @MyResult = SQL_Script FROM AutoSendMail.dbo.A01_St WHERE
ID =' + @MyId;
EXEC sp_executesql @MySelect, '@MyResult varchar(max) OUTPUT', @MyResult OUTPUT
您可以在没有动态SQL的情况下执行此操作,如下所示:
DECLARE @MyRecipients VARCHAR(MAX) ,
@MyId CHAR(4) = '1' ,
@MyResult VARCHAR(MAX);
SET @MyId = '1';
SELECT TOP 1
@MyResult = SQL_Script
FROM AutoSendMail.dbo.A01_St
WHERE ID = @MyId
USE msdb
EXEC sp_send_dbmail @profile_name = 'Operator', @recipients = 'Mail@test.com',
@subject = 'Mail test', @body = 'This is a test-mail', @mailitem_id = '1',
@query = @MyResult, @attach_query_result_as_file = 1
并非您需要动态SQL,但请注意,这样做:
SET @MySelect = 'SELECT SQL_Script FROM AutoSendMail.dbo.A01_St WHERE ID =' + @MyId;
不执行任何代码,仅设置@MySelect
的值。 您需要调用execute命令来运行SQL:
EXEC SP_EXECUTESQL @MySelect
这个怎么样?
select @MyResult = stuff((
select ',' + convert(nvarchar(20), SQL_Script)
from AutoSendMail.dbo.A01_St
where ID = @MyId
for
xml path('')
), 1, 1, '')
虽然这会输出一个逗号分隔的字符串
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.