代码之家  ›  专栏  ›  技术社区  ›  Oleg Volkov

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

  •  1
  • Oleg Volkov  · 技术社区  · 6 年前

    我有一个用于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 回复  |  直到 6 年前
        1
  •  2
  •   Gottfried Lesigang    6 年前

    我不知道您在第一个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 性能更好!但你必须 参加 它的结果集不是那么直观。。。

        2
  •  0
  •   John Woo    6 年前

    您可以将其存储在 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