过程结果集转换为XML

时间:2018-09-25 14:05:10

标签: sql sql-server azure-sql-database

由于结果集的结构可能会因输入而异,因此如何将过程的结果集转换为XML而又不创建临时表?该方案必须在本地和Azure托管SQL Server数据库中都可以工作。

CREATE PROCEDURE SPSample(@Scope VARCHAR(2)) 
AS 
BEGIN 
   IF(@Scope='A') 
       SELECT 1 AS ID,2 AS NAME 
   IF(@Scope='B') 
       SELECT 1 AS CustomerID,'Sample@sample.com' AS Email,'121314' AS ContactNumber 
END

2 个答案:

答案 0 :(得分:0)

我相信您要求使用FOR XML或FOR XML AUTO:

https://docs.microsoft.com/en-us/sql/relational-databases/xml/for-xml-sql-server?view=sql-server-2017

create table mytable(col1 int, col2 nvarchar(20), col3 money)
insert into mytable(col1, col2, col3) values (1, 'string', 123.45)

select * from mytable 
for xml auto

发射:

您可以在任何查询结果集上执行此操作:

select * from sys.objects
for xml auto

这将类似地发出该结构。

答案 1 :(得分:0)

  

我需要一种方法,将存储过程的结果集直接转换为XML对象而不创建表结构,因为过程的结果集可能会有所不同

TSQL无法做到这一点。 TSQL只能使用SELECT而不是EXECUTE转换为XML。您可以使用回送链接服务器或CLR来做到这一点,但这是黑客,在Azure SQL DB中不可用。您将不得不寻找另一种方式。 EG

CREATE PROCEDURE SPSample(@Scope VARCHAR(2), @ResultsAsXml bit = 0) 
. . .