解析并将XML导入SQL Server中的表格
我已经编写了一个将表格数据导出到XML文件的CLR程序集。现在我想将这些数据导入另一个实例的临时表中。 XML文件的结构是这样的:解析并将XML导入SQL Server中的表格
<row>
<SystemInformationID>1</SystemInformationID>
<Database_x0020_Version>10.00.80404.00</Database_x0020_Version>
<VersionDate>2008-04-04T00:00:00</VersionDate>
<ModifiedDate>2008-04-04T00:00:00</ModifiedDate>
</row>
我想要的XML到目标位置被解析并导入到一个临时表。我也有主表,所以我可以从那里得到表结构。 有没有办法?我使用OPENXML,但它似乎没有正常工作。我可以将XML文件读取到一个表中,该表将存储在具有XML数据类型的列中。我的问题是解析该列中的数据。 这是一个临时的尝试:
CREATE TABLE ##T (IntCol int, XmlCol xml)
GO
INSERT INTO ##T(XmlCol)
SELECT * FROM OPENROWSET(
BULK 'c:\HISOutput.xml',
SINGLE_CLOB) AS x
--works correctly up to this point
DECLARE @x xml
DECLARE @id int
SELECT @x=XmlCol FROM ##T
EXEC sp_xml_preparedocument @id OUTPUT, @x
SELECT *
FROM OPENXML (@id,'/row',2)
WITH
dbo.awbuildversion
--I used dbo.awbuildversion table from AdventureWorks DB for testing
this doesn't show the first column no matter how I change the OPENXML instruction.
TX提前
我不太清楚你想要什么,因为OMG小马的回答您的评论是你的问题不同。临时表/表结构有什么问题?
无论如何,我不会在SQL Server 2050及更高版本上使用OPENXML
或sp_xml_preparedocument
(因为您提到过CLR,因此我假定这是因为内存泄漏风险)。
另外,如果你需要的表stucture那么你可以使用INTO #tempTable
DECLARE @foo xml
SET @foo = '<row>
<SystemInformationID>1</SystemInformationID>
<Database_x0020_Version>10.00.80404.00</Database_x0020_Version>
<VersionDate>2008-04-04T00:00:00</VersionDate>
<ModifiedDate>2008-04-04T00:00:00</ModifiedDate>
</row>'
SELECT
bar.value('./SystemInformationID[1]','INT') AS 'SystemInformationID',
bar.value('./Database_x0020_Version[1]','VARCHAR(14)') AS 'Database_x0020_Version',
bar.value('./VersionDate[1]','DATETIME') AS 'VersionDate',
bar.value('./ModifiedDate[1]','DATETIME') AS 'ModifiedDate'
INTO #tempTable -- This?
FROM
@foo.nodes('/row') AS foo(bar) --use nodes not OPENXML
tx sp_xml_preparedocument中。 我会牢记这一点。我的问题在select子句中。我想把脚本交给我们的开发人员,他会为不同数据库中的不同表格运行它。如果我必须在每个表的select命令中写入整个表结构,那将是无效的。我想为每个表生成一个模板XML文件(如果可能的话),或者使用目标站点中的现有表结构(我们在每个站点中都有相同的结构的数据库) – Saba 2009-12-02 17:35:32
@Saba:我可以在XML模式在选择它时调整数据的形状。我自己没有用过。但是,SQL是强烈定义和键入的,并且在不同情况下使相同的xml/query返回不同的列是没有意义的。除非每个目标表有不同的xml – gbn 2009-12-02 19:42:12
@gbn:我不是说相同的查询返回不同的结果。我的意思是相同的查询针对具有不同结构的不同表运行,并且我不想在每次针对不同表运行查询时键入表结构。我想为每个表使用它自己的结构,或者为该表特定的生成的xml模式。 – Saba 2009-12-06 07:52:41
如果不缩进的xml至少4位的SO软件吃<和>字符。我为你修好了。 – 2009-11-29 05:52:32
tx Jim,不知道 – Saba 2009-11-29 07:45:25
或只是简单地突出显示您的代码行,然后按下编辑器工具栏上的“代码”按钮(101 010)以获得有关OPENXML的建议的“代码格式”右边的 – 2009-11-29 08:35:41