这可能是一个简单的问题,对不起。
我有一个以这些行开头的XMl文件:
<?xml version="1.0" encoding="windows-1252"?>
<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData">
<data>
<patient>
<link_id>{764C733A-64DE-4663-82B1-1A23B95FDFE2}</link_id>
我将它加载到如下表格中的XML数据类型中:
CREATE TABLE MMD (
Id INT IDENTITY PRIMARY KEY,
XMLData XML,
LoadedDateTime DATETIME)
INSERT INTO MMD (XMLData, LoadedDateTime)
SELECT CONVERT(XML, BulkColumn) AS BulkColumn, GETDATE()
FROM OPENROWSET(BULK 'C:\Test.xml', SINGLE_BLOB) AS x;
然后我这样查询:
DECLARE @XML AS XML, @hDoc AS INT, @SQL NVARCHAR (MAX)
SELECT @XML = XMLData FROM MMD
EXEC sp_xml_preparedocument @hDoc OUTPUT, @XML
;with xmlnamespaces (default 'http://xyz.com.au/schema/v1_10/MyData/')
SELECT distinct(link_id)
FROM OPENXML(@hDoc, 'MyData/data/patient')
WITH
(link_id [varchar](50) 'link_id') t
EXEC sp_xml_removedocument @hDoc
GO
查询返回0行。但是,如果我从文件的第二行删除命名空间,如下所示:from:
<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData">
为:
<MyData>
然后我得到了我期望的结果!
我已阅读所有帖子并尝试了各种语法变体但未成功。
提前感谢您的帮助。
布赖恩
答案 0 :(得分:0)
我不确定OPENXML
和with xmlnamespaces
是否可以合作。如果我完全切换到使用xml
data type methods(并将示例扩展为有效的xml),一切正常:
declare @t table (XMLData xml)
insert into @t(XmlData) values ('<?xml version="1.0" encoding="windows-1252"?>
<MyData xmlns="http://xyz.com.au/schema/v1_10/MyData">
<data>
<patient>
<link_id>{764C733A-64DE-4663-82B1-1A23B95FDFE2}</link_id>
</patient>
</data>
</MyData>')
;with xmlnamespaces (default 'http://xyz.com.au/schema/v1_10/MyData')
select distinct XmlData.value('(MyData/data/patient/link_id)[1]','varchar(50)')
from @t
结果:
--------------------------------------------------
{764C733A-64DE-4663-82B1-1A23B95FDFE2}