Как преобразовать набор результатов SQL Server в XML после факта? - PullRequest
1 голос
/ 17 марта 2011

Есть ли способ заставить набор результатов хранимой процедуры SQL Server (или любой набор результатов после факта) быть закодирован в формате XML?

Я хочу, чтобы результирующий набор был закодирован в XML, как если бы при выборе использовалось предложение FOR XML RAW.

Однако сложную логику хранимой процедуры и ее внутренние операторы SELECT не следует изменять для возврата XML, поскольку в большинстве случаев процедура используется для своего стандартного / не XML-набора результатов.

Обновление : акцент на том, что я ищу ответ в среде SQL Server - результаты должны возвращаться так, как если бы SQL Server непосредственно кодировал их сам, как XML, так же, как это происходит при использовании встроенных функций XML, таких как предложение FOR XML.

Ответы [ 4 ]

1 голос
/ 17 марта 2011

Вы вставили бы данные из SP во временную таблицу, а затем выбрали из этого FOR XML

Это не будет работать, если сам SP уже делает INSERT .. EXEC SPROC, потому что вы не можете их вложить

Примеры работы

use tempdb;
create proc giveme
as
select a = 1, b = GETDATE()
union all
select 2, b = '20100101'

Использование INSERT .. EXEC

declare @t table (a int, b datetime)
insert @t
exec giveme
select * from @t for xml raw

Использование OPENQUERY

exec sp_addlinkedserver 'localhost'

exec sp_serveroption @server = 'localhost' 
   ,@optname = 'DATA ACCESS' 
   ,@optvalue = 'TRUE' 

select *
from openquery(localhost, 'exec tempdb..giveme')
for xml raw
0 голосов
/ 18 марта 2011

Вы можете попробовать вставить набор результатов из хранимой процедуры в переменную таблицы (или временную таблицу) и выбрать строки таблицы с помощью предложения FOR XML.

Вот пример:

DECLARE @MyDataTable AS TABLE ( col1 int,...., colN int)

Убедитесь, что столбец @MyDataTable содержит те же столбцы, что и наборы результатов хранимых процедур.

INSERT INTO @MyDataTable 
EXECUTE mysp_GetData @param1=value,....,@paramN;

SELECT * FROM  @MyDataTable
FOR XML AUTO
0 голосов
/ 18 марта 2011

Под «фактом» вы подразумеваете все еще в среде SQL Server?Или вы говорите о клиентской программе?

В SQL вы, вероятно, могли бы написать sproc, который действует как оболочка для ваших других sprocs, по этим строкам .Sproc-обертка будет обрабатывать работу FOR XML.

. В .NET есть число способов сделать это.

0 голосов
/ 17 марта 2011

Вы можете попробовать использовать OPENROWSET в сотрудничестве с FOR XML для преобразования.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...