Присвоить результат из динамического SQL в параметре другому параметру - PullRequest
0 голосов
/ 14 марта 2019

Мне нужно построить свой запрос динамически, во-первых, он получает 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 Ответ

2 голосов
/ 14 марта 2019

Вы можете использовать параметры с 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 + ')'')'
...