Лучший способ передать xml на SQL Server?

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
4
0
4 895
4

Ответы 4

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

Прочтите этот документ, и он предложит вам следующие варианты:

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

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

Как можно импортировать существующий 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 в вашу существующие таблицы.

Вы можете использовать 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, в xsl: text, чтобы предотвратить добавление дополнительных символов в запрос. И вы должны убедиться, что вывод XSLT был текстом. При этом вы можете получить список операторов SQL, которые можно запустить через БД. или вы можете использовать XSLT для вывода оператора T-SQL, который можно загрузить как хранимую процедуру.

Другие вопросы по теме