Как сохранить результат exec в переменной - PullRequest
1 голос
/ 18 марта 2019

Как я могу сохранить результат exec в переменной? На выходе получается JSON. Мой SQL-запрос сложен и динамически генерируется, поэтому я должен установить переменную и выполнить ее.

create PROCEDURE dbo.RetrievePerfCounterData @jsonOutput NVARCHAR(MAX) OUTPUT
AS    
BEGIN 
    declare @sql NVARCHAR(MAX)
    SET @sql = ' SELECT TOP (1) getdate() AS ''dateTime'' ,suser_sname()AS ''user'' FOR JSON PATH  '

    exec (@sql)
END

Вот моя попытка сохранить данные в переменной:

DECLARE @json AS NVARCHAR(MAX)
EXEC dbo.RetrievePerfCounterData @jsonOutput = @json OUTPUT

Ответы [ 2 ]

0 голосов
/ 18 марта 2019

Вам необходимо использовать подзапрос:

SET @json = (SELECT TOP (1) getdate() AS [dateTime],suser_sname()AS [user] FOR JSON PATH);
0 голосов
/ 18 марта 2019
DECLARE @myVar VARCHAR(MAX)
DECLARE @SQL NVARCHAR(MAX)

IF OBJECT_ID('tempdb..#t1') IS NOT NULL DROP TABLE #t1
CREATE TABLE #t1 (col1 INT, col2 INT)
INSERT INTO #t1
SELECT 1, 1
UNION
SELECT 1, 2

SET @SQL = 'SET @myVar = (SELECT * FROM #t1 AS T FOR JSON AUTO);' 
EXEC sp_executesql @SQL, N'@myVar VARCHAR(MAX) OUT', @myVar OUT

SELECT @myVar
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...