我有一个名为Code的表,有两个字段,ID和Code。
我有一个XML文件:
<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);
查询运行时没有错误,但没有数据插入到代码表中。 我看不出我错过了什么。
感谢您的帮助。
答案 0 :(得分:1)
使用本机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)
答案 1 :(得分:1)
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);