将参数中动态SQL的结果分配给另一个参数

时间:2019-03-14 10:38:58

标签: sql sql-server dynamic-sql

我必须动态地构建查询,首先,它从日志中获取maxlogid,并将其附加到临时表名称中。然后执行COALESCE将不同的值返回到字符串中。

但是,我希望将字符串的输出包含在参数中,因此以后可以在动态sql查询中再次使用它。

这是我的代码;

DECLARE @maxLogId VARCHAR(10)
SELECT @maxLogId = (SELECT Max(id) FROM dbo.tLog)   

DECLARE @PolicyTempTable VARCHAR(100)
SET @PolicyTempTable = '##tPols' + @maxLogId

DECLARE @emailParm NVARCHAR(1000) 
SET @emailParm = N'DECLARE @email VARCHAR(MAX)
SELECT COALESCE(@email+'','' ,'''') + '''''''''''' + EMAIL + '''''''''''' 
FROM (SELECT DISTINCT EMAIL FROM ' + @PolicyTempTable + ') d'

EXEC sp_executesql @emailParm

结果返回如下;

“ abc@a.co.uk”,“” abc@b.co.uk“

我希望能够将sp_executesql写入一个单独的参数中,因此我可以将其用于如下所示的动态查询;

DECLARE @StrSQLEmail VARCHAR(8000)
SET @StrSQLEmail = 'SELECT * FROM OPENQUERY(ATOM,''Select * from ATOMS.EMAILS WHERE EMAIL IN (' + '' EXEC sp_executesql @emailParm + '' + ')'')'

但是,我不能在动态查询中使用sp_executesql。

1 个答案:

答案 0 :(得分:2)

您可以在sp_executesql中使用参数

ColourInput

然后您可以构建第二个动态sql

DECLARE @emailParm NVARCHAR(1000) 
DECLARE @emailOut NVARCHAR(MAX)
SET @emailParm = N'SELECT COALESCE(@email+'','' ,'''') + '''''''''''' + EMAIL + '''''''''''' 
FROM (SELECT DISTINCT EMAIL FROM ' + @PolicyTempTable + ') d'

EXEC sp_executesql @emailParm, N'@email VARCHAR(1000) OUTPUT', @email = @emailOut OUTPUT