首页 > 解决方案 > 如何在 TSQL 中有条件地返回“For XML”和“For JSON”

问题描述

我想要一个存储过程,它可以根据参数的值返回 JSON、XML 或表格数据。

例如,

DECLARE @ReturnFormat = 'XML'

会返回:

SELECT * 
FROM MyTable 
FOR XML PAT('MyPath'), TYPE, ROOT('MyRoot')

如果@ReturnFormat = 'JSON',它将返回

SELECT * 
FROM MyTable   
FOR JSON PATH

如果@ReturnFormat = 'Tabular',它将返回

SELECT * 
FROM MyTable

但我显然不想复制/粘贴 SQL。我怎么会做出这样的有条件回报?

标签: sql-servertsql

解决方案


简单的问题是什么:

CREATE PROCEDURE dbo.YourProc
  @ReturnFormat varchar(10)
AS
BEGIN
  SET NOCOUNT ON;

  IF @ReturnFormat = 'XML'
    your XML SELECT
  ELSE IF @ReturnFormat = 'JSON'
    your JSON SELECT
  ELSE IF @ReturnFormat = 'Tabular'
    your tabular SELECT
  /* If needed, add an ELSE. */

END;

推荐阅读