Please start any new threads on our new
site at https://forums.sqlteam.com. We've got lots of great SQL Server
experts to answer whatever question you can come up with.
Author |
Topic |
janvan
Starting Member
1 Post |
Posted - 2014-05-05 : 11:07:57
|
Hi,I have an xml document that (for this example) I've simplified to look like this:<xml xmlns:s='uuid:BDC6E3F0-6DA3-11d1-A2A3-00AA00C14882' xmlns:dt='uuid:C2F41010-65B3-11d1-A29F-00AA00C14882' xmlns:rs='urn:schemas-microsoft-com:rowset' xmlns:z='#RowsetSchema'><s:Schema id='RowsetSchema'> <s:ElementType name='row' content='eltOnly' rs:updatable='true'> <s:AttributeType name='ItemCode' rs:number='1' rs:writeunknown='true' rs:basecatalog='Vehicles' rs:basetable='vehicle_option' rs:basecolumn='ItemCode' rs:keycolumn='true'> <s:datatype dt:type='string' rs:dbtype='str' dt:maxLength='8' rs:maybenull='false'/> </s:AttributeType> <s:AttributeType name='OptionPrice_Code' rs:number='2' rs:writeunknown='true' rs:basecatalog='Vehicles' rs:basetable='vehicle_option' rs:basecolumn='OptionPrice_Code'> <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/> </s:AttributeType> <s:AttributeType name='OptionName_Code' rs:number='3' rs:writeunknown='true' rs:basecatalog='Vehicles' rs:basetable='vehicle_option' rs:basecolumn='OptionName_Code' rs:keycolumn='true'> <s:datatype dt:type='int' dt:maxLength='4' rs:precision='10' rs:fixedlength='true' rs:maybenull='false'/> </s:AttributeType> <s:extends type='rs:rowbase'/> </s:ElementType></s:Schema><rs:data> <z:row ItemCode='02077400' OptionPrice_Code='1' OptionName_Code='1006'/> <z:row ItemCode='02077400' OptionPrice_Code='5' OptionName_Code='1009'/> <z:row ItemCode='02077500' OptionPrice_Code='1' OptionName_Code='1006'/> <z:row ItemCode='02077500' OptionPrice_Code='5' OptionName_Code='1009'/> <z:row ItemCode='02078100' OptionPrice_Code='5' OptionName_Code='49'/></rs:data></xml>When I try querying the xml document in SQL, I get nothing back, unless I remove the schema information. I'm using this:declare @x xmlselect @x = Pfrom openrowset (bulk 'E:\VehicleOption0514.xml', single_blob) as Products(P)declare @hdoc intexec sp_xml_preparedocument @hdoc output, @xselect Tbl.Col.value('@ItemCode', 'varchar(8)'), Tbl.Col.value('@OptionPrice_Code', 'bigint'), Tbl.Col.value('@OptionName_Code', 'bigint')from @x.nodes('//row') Tbl(Col)exec sp_xml_removedocument @hdocPlease help or point me in the right direction. This is the first time I've had to query xml from sql. Thanks,J |
|
James K
Master Smack Fu Yak Hacker
3873 Posts |
Posted - 2014-05-05 : 11:23:33
|
You should specify the namespace with the ;with xmlnamespaces construct. So, it would be:;WITH XMLNAMESPACES ( DEFAULT '#RowsetSchema')select Tbl.Col.value('@ItemCode', 'varchar(8)'),Tbl.Col.value('@OptionPrice_Code', 'bigint'),Tbl.Col.value('@OptionName_Code', 'bigint')from @x.nodes('//row') Tbl(Col) You don't necessarily have to use that default, but if you don't, you will need to indicate the namespace in the query itself. See here for details: http://technet.microsoft.com/en-us/library/ms177400.aspx |
|
|
|
|
|
|
|