将XML导入SQL Server 2005未导入的数据
我有一个名为Code的表,有两个字段,ID和Code 我有一个XML文件:将XML导入SQL Server 2005未导入的数据,sql,xml,sql-server-2005,import,Sql,Xml,Sql Server 2005,Import,我有一个名为Code的表,有两个字段,ID和Code 我有一个XML文件: <DataSet> <scan> <ID>4</ID> <Code>420</Code> </scan> <scan> <ID>5</ID> <Code>420</Code> </scan> &l
<DataSet>
<scan>
<ID>4</ID>
<Code>420</Code>
</scan>
<scan>
<ID>5</ID>
<Code>420</Code>
</scan>
<scan>
<ID>6</ID>
<Code>420</Code>
</scan>
<scan>
<ID>4</ID>
<Code>420</Code>
</scan>
<scan>
<ID>5</ID>
<Code>420</Code>
</scan>
</DataSet>
我用这个
INSERT INTO code (id,code)
SELECT X.scan.query('id').value('.','INT'),
X.scan.query('code').value('.','VARCHAR(30)')
FROM (
SELECT CAST(x AS XML)
FROM OPENROWSET(
BULK 'C:\dataimport.xml',
SINGLE_BLOB) AS T(x)
) AS T(x)
CROSS APPLY x.nodes('dataset/scan') AS X(scan);
查询运行时不会出错,但不会将任何数据插入到代码表中。
我看不出我错过了什么
谢谢你的帮助 使用本机SQL Server 2005 XML支持—类似这样的支持应该可以:
DECLARE @input XML
SELECT @input = CAST(x AS XML)
FROM OPENROWSET(BULK 'C:\dataimport.xml', SINGLE_BLOB) AS T(x)
INSERT INTO Code(ID, Code)
SELECT
Scan.value('(ID)[1]', 'int'),
Scan.value('(Code)[1]', 'varchar(30)')
FROM @input.nodes('/DataSet/scan') AS Tbl(Scan)
SQL Server中的XML区分大小写 试试这个:
INSERT INTO code (id,code)
SELECT X.scan.query('ID').value('.','INT'),
X.scan.query('Code').value('.','VARCHAR(30)')
FROM (
SELECT CAST(x AS XML)
FROM OPENROWSET(
BULK 'C:\dataimport.xml',
SINGLE_BLOB) AS T(x)
) AS T(x)
CROSS APPLY x.nodes('DataSet/scan') AS X(scan);
您解决了问题,但未提及问题所在+1以获得更好的外观和可能更好的性能。@MikaelEriksson:我认为这是因为XPath表达式
.nodes('dataset/scan')
没有注意字符串的大小写-它应该是.nodes('dataset/scan')
在XML中-但这只是一个猜测…:-)谢谢你的指导和帮助。知道当我得到相同的结果时,我知道要查找什么。在查询的.nodes()部分中是否只区分大小写?我在其他领域测试了案例敏感性,但案例似乎并不重要。我将scan.query改为scan.query,效果很好。我认为.nodes('DataSet/scan')需要匹配XML中节点的大小写。对吗?ThanksIt是区分大小写的xPath表达式。在节点、查询和值中使用的字符串。