Лучший способ перенести XML на SQL Server? - PullRequest
4 голосов
/ 12 сентября 2008

Я уже некоторое время слушаю блог подкаста, надеюсь, я не нарушу это. Вопрос заключается в следующем: я должен вставить XML в базу данных. Это будет для уже определенных таблиц и полей. Так каков наилучший способ сделать это? Пока я склоняюсь к программированию. Я видел варианты varios, один из них - Data Transfer Objects (DTO), в SQL Server есть sp_xml_preparedocument, который используется для передачи XML-объектов в объект и через код.

Я использую CSharp и SQL Server 2005. Поля не являются полями XML, это обычные типы данных SQL.

Ответы [ 4 ]

2 голосов
/ 13 сентября 2008

В попытке попытаться помочь нам, возможно, понадобятся некоторые разъяснения. Возможно, решив проблему, вы можете сообщить нам, если это то, что вы спрашиваете:

Как можно импортировать существующий xml в базу данных SQL 2005, не полагаясь на встроенный тип xml?

Довольно прямолинейное решение, которое вы уже упомянули, это sp_xml_preparedocument в сочетании с openxml .

Надеюсь, следующий пример иллюстрирует правильное использование. Для более полного примера ознакомьтесь с документами MSDN на Использование OPENXML .

declare @XmlDocumentHandle int
declare @XmlDocument nvarchar(1000)
set @XmlDocument = N'<ROOT>
<Customer>
   <FirstName>Will</FirstName>
   <LastName>Smith</LastName>
</Customer>
</ROOT>'

-- Create temp table to insert data into
create table #Customer 
( 
    FirstName varchar(20),
    LastName varchar(20) 
)
-- Create an internal representation of the XML document.
exec sp_xml_preparedocument @XmlDocumentHandle output, @XmlDocument

-- Insert using openxml allows us to read the structure
insert into #Customer
select 
    FirstName = XmlFirstName,
    LastName = XmlLastName
from openxml ( @XmlDocumentHandle, '/ROOT/Customer',2 )
with 
(
    XmlFirstName  varchar(20) 'FirstName',
    XmlLastName varchar(20) 'LastName'
)
where ( XmlFirstName = 'Will' and XmlLastName = 'Smith' )

-- Cleanup xml document
exec sp_xml_removedocument @XmlDocumentHandle

-- Show the data
select * 
from #Customer

-- Drop tmp table
drop table #Customer

Если у вас есть XML-файл и вы используете C #, то определение хранимой процедуры, которая делает что-то похожее на описанное выше, а затем передача всего содержимого XML-файла в хранимую процедуру в виде строки должно дать вам довольно простой способ импорта xml в существующие таблицы.

0 голосов
/ 18 сентября 2008

Возможно, вы захотите использовать XSLT для передачи вашего XML в операторы SQL ... т.е.

<xml type="user">
    <data>1</data>
    <data>2</data>
<xml>

Тогда XSLT будет выглядеть как

<xsl:template match="xml">
    INSERT INTO <xsl:value-of select="@type" /> (data1, data2) VALUES (
       '<xsl:value-of select="data[1]" />',
       '<xsl:value-of select="data[2]" />');
</xsl:template>

Оператор match, скорее всего, не будет корневым узлом, но, надеюсь, вы поняли идею. Вам также может понадобиться обернуть не xsl: value-of parts в xsl: text, чтобы предотвратить сброс дополнительных символов в запрос. И вам нужно убедиться, что вывод XSLT был текстовым. Тем не менее, вы можете получить список операторов SQL, которые вы можете запустить через БД. или вы можете использовать XSLT для вывода оператора T-SQL, который вы можете загрузить как хранимую процедуру.

0 голосов
/ 13 сентября 2008

Просмотрите этот документ, и он даст вам варианты:

MSDN: Параметры XML в Microsoft SQL Server 2005

0 голосов
/ 13 сентября 2008

Если ваш XML соответствует определенной схеме XSD, вы можете использовать инструмент командной строки "xsd.exe", чтобы сгенерировать классы объектов C #, с которыми вы можете связать XML, а затем сформировать операторы вставки, используя свойства эти объекты: MSDN XSD Doc

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