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

Assign result from dynamic SQL in a parameter to another parameter

我必须动态构建查询,首先,它从日志中获取 maxlogid,并将其附加到临时 table 名称。然后它会合并 return 不同的值到一个字符串中。

但是,我想在参数中包含字符串的输出,以便稍后在动态 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

结果return编辑如下;

"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。

您可以将参数与 sp_executesql

一起使用
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

然后你可以建立你的第二个动态sql

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