我必须动态地构建查询,首先,它从日志中获取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。
答案 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