T-SQL存储过程结果变为变量

时间:2018-02-14 06:59:42

标签: json tsql stored-procedures return-value sql-server-2016

我有一个存储过程用于JSON中的一些选择。

CREATE PROC [pr_MySP]
    -- params
WITH ENCRYPTION
AS
BEGIN
    SELECT 
...
    FOR JSON PATH;
END

现在我想在另一个中使用这个存储过程。

CREATE PROC [pr_MySP_1]
    -- params
WITH ENCRYPTION
AS
BEGIN
    DECLARE @result_sp NVARCHAR(MAX);
    EXEC @result_sp = [pr_MySP];
    SELECT @result_sp;
END

但是当我尝试SELECT @result_sp;时,它会返回0。 我究竟做错了什么?

2 个答案:

答案 0 :(得分:2)

我不知道你在第一个SP中做了什么,但在一个可内联的UDF中可能会更好地解决这个问题:

CREATE FUNCTION dbo.CreateJSON()
RETURNS NVARCHAR(MAX)
AS
BEGIN
RETURN (SELECT TOP 10 * FROM sys.objects FOR JSON AUTO);
END
GO

- 您可以在任何上下文中使用UDF。您可以定义参数来控制行为

DECLARE @TheJson NVARCHAR(MAX);
SET @TheJson=dbo.CreateJSON();
SELECT @TheJson;
GO

- 清理

DROP FUNCTION dbo.CreateJSON; 

在大多数情况下,内嵌TVF 的性能更佳!但是你必须加入其结果集,这不是那么直观......

答案 1 :(得分:0)

您可以将其存储在table variable中。

DECLARE @result_sp (results NVARCHAR(MAX))

INSERT INTO @result_sp
EXEC [pr_MySP]

SELECT TOP 1 results FROM @result_sp

如果您仍希望将其存储在正常变量中,

DECLARE @final NVARCHAR(MAX)
DECLARE @result_sp (results NVARCHAR(MAX))

INSERT INTO @result_sp
EXEC [pr_MySP]

SELECT TOP 1 @final = results FROM @result_sp

SELECT @final