在存储过程中有条件地使用 FOR JSON PATH

Conditionally using FOR JSON PATH in stored procedure

我想创建根据输入参数有条件地输出 JSON 的存储过程。是否可以在不必复制 select 语句的情况下完成此操作?

CREATE PROCEDURE myProcedure @outputJson bit 
AS
BEGIN

        IF outputJson = 1
        BEGIN

            SELECT col1,
                   col2,
                   col3
              FROM dbo.MyTable 
               FOR JSON PATH    

        END
        ELSE
        BEGIN

            SELECT col1,
                   col2,
                   col3
              FROM dbo.MyTable 

        END

END
GO

您可以使用动态 sql 来包含基于参数的 "FOR JSON" 子句。

CREATE PROCEDURE dbo.myProcedure @outputJson bit
AS
BEGIN
    DECLARE @sql nvarchar(max) = N'SELECT col1, col2, col3 FROM dbo.MyTable';

    IF @outputJson = 1
    BEGIN
        SET @sql += ' FOR JSON PATH';
    END

    EXECUTE sp_executesql @sql;
END
GO