首先-请 使用适当的数据类型! 如果您的源数据是XML-为什么不使用
XML数据类型?
另外,如果您
Date的表中有一个-为什么不输入a
DATE或
DATETIME类型呢?而为什么是
Number一个
VARCHAr(50)??
没有意义......
然后:您无需查看XML文档中存在的XML名称空间-但 必须 !
最后-我建议使用本机XQuery支持,而不是使用旧的,不建议使用的
sp_xml_preparedocument/
OpenXML方法…。
对我来说似乎更容易,更清晰…
用这个:
-- variable declarationDECLARE @XMLData XML-- creating temporary tableCREATE TABLE #TEMP_TABLE( REC_ID INT IDENTITY(1,1), [Id] INT, [Date] DATETIME2(3), [Number] INT);
然后使用适当的XQuery语句, 包括XML名称空间 来处理数据:
SET @XMLData = '<ArrayOfEntityNested xmlns:i="http://www.w3.org/2001/XMLSchema-instance"xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.Bijak"> <EntityNested> <Id xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto">1</Id> <Date xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">0001-01-01T00:00:00</Date> <Number xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak" i:nil="true" /> </EntityNested> <EntityNested> <Id xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto">42</Id> <Date xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">2013-12-22T14:45:00</Date> <Number xmlns="http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak">373</Number> </EntityNested> </ArrayOfEntityNested>';WITH XMLNAMESPACES ('http://schemas.datacontract.org/2004/07/Gbms.Dto.Bijak' AS ns1, 'http://schemas.datacontract.org/2004/07/Gbms.Dto' AS ns2, 'http://schemas.datacontract.org/2004/07/Gbms.Dto.VirginBijak' AS ns3)INSERT INTO #TEMP_TABLE(ID, Date, Number) SELECt xc.value('(ns2:Id)[1]', 'int'), xc.value('(ns3:Date)[1]', 'DateTime2'), xc.value('(ns3:Number)[1]', 'int') FROM @XmlData.nodes('/ns1:ArrayOfEntityNested/ns1:EntityNested') AS xt(xc)
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)