将参数中动态 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 + ')'')'
我必须动态构建查询,首先,它从日志中获取 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 + ')'')'