我编写了一个CLR程序集,它将表的数据导出到XML文件中。现在我想将这些数据导入另一个实例的临时表中。 XML文件结构如下:
<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.
提前
答案 0 :(得分:3)
我不太确定你想要什么,因为你对OMG Ponies回答的评论与你的问题不同。临时表/表结构有什么问题?
无论如何,我不会在SQL Server 2050及更高版本上使用OPENXML
或sp_xml_preparedocument
(因为你提到了CLR),因为存在内存泄漏风险。
此外,如果您需要表格结构,那么您可以使用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