我正在使用下面发布的一段动态SQL。
在我打印@Query并运行它的测试期间,我的变量被分配。但是当添加了额外的间接级别,并且使用Exec运行@Query时,最后的Select语句将返回null。
DECLARE @ETFirstPart varchar(max)
DECLARE @ETContactLines varchar(max)
DECLARE @ETAlternateContactOnlyLine varchar(max)
DECLARE @ETLastPart varchar(max)
SET @Query = N'SELECT @ETFirstPart = piv.HBAppCli1, @ETContactLines = piv.HBAppCli2a, @ETAlternateContactOnlyLine = piv.HBAppCli2b, @ETLastPart = piv.HBAppCli3
from (select EmailMessageType, EmailBody
FROM ' + @dbSharedServer + '.dbShared.dbo.EmailMessage e
) ac
pivot (max(EmailBody)
for EmailMessageType in (HBAppCli1, HBAppCli2a, HBAppCli2b, HBAppCli3)
) piv'
PRINT @Query
EXEC (@Query)
SELECT @ETFirstPart, @ETContactLines, @ETAlternateContactOnlyLine, @ETLastPart
如何在动态选择中获取分配给所选值的变量?
答案 0 :(得分:1)
您需要使用sp_executesql。如下所示:
DECLARE @sql nvarchar(max)
set @sql = N'SELECT @ETFirstPart = piv.HBAppCli1, @ETContactLines = piv.HBAppCli2a, @ETAlternateContactOnlyLine = piv.HBAppCli2b, @ETLastPart = piv.HBAppCli3
from (select EmailMessageType, EmailBody
FROM ' + @dbSharedServer + '.dbShared.dbo.EmailMessage e
) ac
pivot (max(EmailBody)
for EmailMessageType in (HBAppCli1, HBAppCli2a, HBAppCli2b, HBAppCli3)
) piv'
exec sp_executesql @sql, N'@ETFirstPart varchar(max) out, @ETContactLines varchar(max) out, @ETAlternateContactOnlyLine varchar(max) out, @ETLastPart varchar(max) out', @ETFirstPart out, @ETContactLines out, @ETAlternateContactOnlyLine out, @ETLastPart out
SELECT @ETFirstPart, @ETContactLines, @ETAlternateContactOnlyLine, @ETLastPart