Я пытаюсь сохранить XML-данные в базе данных SQL Server 2008 R2 Express, каждый XML-файл имеет разные данные. Как это сделать проще всего?
Каковы наилучшие варианты, пожалуйста, объясните на примере.
Я пытаюсь сохранить XML-данные в базе данных SQL Server 2008 R2 Express, каждый XML-файл имеет разные данные. Как это сделать проще всего?
Каковы наилучшие варианты, пожалуйста, объясните на примере.
Хорошо, это пример хранения значений xml в таблице. Я не пробовал этот код, но он должен работать, но, по крайней мере, он должен прояснить, как поступить, как ожидалось.
/* Imagine your xml looks something like this
<Content>
<Title>Text</Title>
<Value>15</Value>
</Content>
*/
CREATE TABLE [dbo].[MyXmlStorage]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[Title] [nvarchar](100) NOT NULL,
[Value] int NOT NULL,
CONSTRAINT [PK_MyXmlStorage]
PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE PROCEDURE [dbo].[InsertXml]
(@filePathFull nvarchar(255))
AS
DECLARE @xmlAsString VARCHAR(MAX)
DECLARE @sql nvarchar(max)
DECLARE @xml XML
DECLARE @Rms_FileId nvarchar(50)
DECLARE @Rms_Id nvarchar(50)
DECLARE @Rms_Type nvarchar(50)
DECLARE @Rms_Timestamp nvarchar(50)
BEGIN
SET @sql = 'SELECT @xmlAsString = x.y FROM OPENROWSET( BULK ''' + RTRIM(@filePathFull) + ''', SINGLE_CLOB) x(y)'
exec sp_executesql @sql,N'@xmlAsString VARCHAR(MAX) OUTPUT',@xmlAsString OUTPUT
set @xml = CONVERT(XML,@xmlAsString)
/* Use xpath to query nodes for values inside the Content tag*/
INSERT INTO MyXmlStorage([Title],[Value])
SELECT
x.y.value('title[1]/text()[1]', 'nvarchar(100)') AS title,
x.y.value('value[1]/text()[1]', 'int') AS value
FROM @xml.nodes('//Content') AS x(y)
END
)
Я считаю, что самым простым способом будет создание хранимой процедуры для обработки хранилища для вас. Затем вы можете получить его с помощью предпочтительного ORM и позволить C# десериализовать его для вас.
CREATE TABLE [dbo].[MyXmlStorage]
(
[Id] [int] IDENTITY(1,1) NOT NULL,
[FileName] [nvarchar](255) NOT NULL,
[Xml] [xml] NOT NULL,
CONSTRAINT [PK_MyXmlStorage]
PRIMARY KEY CLUSTERED ([Id] ASC)
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
CREATE PROCEDURE [dbo].[InsertXml]
(@filePathFull nvarchar(255))
AS
DECLARE @xmlAsString VARCHAR(MAX)
DECLARE @sql nvarchar(max)
DECLARE @xml XML
DECLARE @Rms_FileId nvarchar(50)
DECLARE @Rms_Id nvarchar(50)
DECLARE @Rms_Type nvarchar(50)
DECLARE @Rms_Timestamp nvarchar(50)
BEGIN
SET @sql = 'SELECT @xmlAsString = x.y FROM OPENROWSET( BULK ''' + RTRIM(@filePathFull) + ''', SINGLE_CLOB) x(y)'
exec sp_executesql @sql,N'@xmlAsString VARCHAR(MAX) OUTPUT',@xmlAsString OUTPUT
set @xml = CONVERT(XML,@xmlAsString)
INSERT INTO MyXmlStorage([FileName],[Xml])
VALUES (@filePathFull, @xml)
END
Затем запустите его следующим образом:
exec InsertXml N'C:\files\xmlfile.xml'
{ }
) на панели инструментов редактора, чтобы красиво отформатировать и выделить синтаксис! Таким образом, вам также не нужны никакие грязные теги <br/>
!
- person marc_s; 03.06.2014
XML
, сохраните XML внутри этого столбца.... - person marc_s   schedule 03.06.2014