繁体   English   中英

将SQL查询的结果保存到本地SQL变量中

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM