отправить XML в SQL - PullRequest
       1

отправить XML в SQL

0 голосов
/ 03 мая 2010

Может ли кто-нибудь предоставить пример того, как отправить XML с C # на SQL Server, а затем зациклить на XML в хранимой процедуре, которая его получила, и обновлять или вводить построчно.

Ответы [ 2 ]

1 голос
/ 03 мая 2010

Ознакомьтесь с серией из трех частей по SQL XML за 15 секунд: http://www.15seconds.com/Issue/050803.htm.

Я бы лично использовал функции SQL XQuery, чтобы разделить ваш XML на части и сохранить их в SQL Server.

Если у вас есть что-то вроде:

<data>
  <person>
     <name>Jones</name>         
     <firstname>Peter</firstname>
  </person>
  <person>
     <name>Smith</name>         
     <firstname>Frank</firstname>
  </person>
<data>

Вы можете написать что-то вроде:

SELECT
   Data.Person.value('(name)[1]', 'varchar(20)') as 'Name',
   Data.Person.value('(firstname)[1]', 'varchar(20)') as 'First Name'
FROM 
   @XmlVar.nodes('/data/person') As Data(Person)

Таким образом, в основном, функция .nodes уничтожает ваш XML в «псевдотаблица» Data.Person - каждая запись <person> становится одной строкой в ​​таблице.

С помощью функции .value() вы можете извлекать отдельные значения из этих уничтоженных узлов XML. Теперь у вас есть куча полей varchar (20), например, вставлен в таблицу.

Этот метод хорошо работает, если ваш XML довольно маленький (несколько сотен записей). Если у вас есть огромные XML-файлы, вы можете изучить другие методы, такие как XML Bulkload .

0 голосов
/ 03 мая 2010

Я делаю много предположений, поскольку ваш вопрос неясен.

Что вы можете сделать, это создать хранимую процедуру в SQL Server, которая принимает строку в качестве параметра. Эта строка должна содержать Xml, который вы хотите обработать. См. Следующий фрагмент возможной хранимой процедуры, которая обрабатывает XML.

CREATE PROCEDURE [dbo].[sproc_ProcessXml]
(
  @data AS NTEXT
) 
AS
/* Create a temporary table to insert the Xml data*/         
IF (OBJECT_ID(N'tempdb..#temp') IS NOT NULL )
   DROP TABLE #temp

CREATE TABLE [dbo].[#temp] 
( 
  /* your table definition */
)

DECLARE @handle AS INTEGER
DECLARE @flags  AS INTEGER 

EXEC sp_xml_preparedocument @handle OUTPUT, @data

/* Supported is only element mapping */ 
SET @flags = 2

INSERT INTO [dbo].[#temp] 
  SELECT [Insert xml fields] 
  FROM OPENXML (@handle, '[Xpath in XmlDocument', @flags)
  WITH (Id  INTEGER)

EXEC sp_xml_removedocument @handle  

/* Select data from Xml and from several normal tables if needed */
SELECT  [Insert your Fields]
  FROM dbo.[#temp] t 

 DROP TABLE [dbo].[#temp]  

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