久久久久久久av_日韩在线中文_看一级毛片视频_日本精品二区_成人深夜福利视频_武道仙尊动漫在线观看

SQL SERVER:如何從 XML 文件進行查詢

SQL SERVER : How to make query from XML file(SQL SERVER:如何從 XML 文件進行查詢)
本文介紹了SQL SERVER:如何從 XML 文件進行查詢的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!

問題描述

我有兩個這樣的 xml 文件:

I have two xml file like this:

<?xml version="1.0"?>
<instance xmlns="http://www.ubrea.com/xforms/88668970-6edb-0131-28e9-22000a1cda92" xmlns:tm="http://www.ubrea.com/xforms" >
<inputs>
<Truck_Number_Non_Barcode>MNKSJJHDHH88728</Truck_Number_Non_Barcode>
<VIN>
  <Non_Barcode>xyz</Non_Barcode>
  <ODO>1425788</ODO> 
  <Defect>
    <Code>33J</Code>
</Defect> 
</VIN>
</inputs>
</instance>

還有

<?xml version="1.0"?>
<instance xmlns="http://www.ubrea.com/xforms/88668970-6edb-0131-28e9-22000a1cda92" xmlns:tm="http://www.ubrea.com/xforms" >
<inputs>
<Number_Non_Barcode>mnbcdsddsd3455</Number_Non_Barcode>
<VIN>
  <Non_Barcode>xyz</Non_Barcode>
  <ODO>1425788</ODO>      
</VIN>
</inputs>
</instance>

下面是我解析xml文件的sqlquery:

Below is my sqlquery for parsing xml file:

declare @xmldata xml
set @xmldata ='
<?xml version="1.0"?>
<instance xmlns="http://www.ubrea.com/xforms/88668970-6edb-0131-28e9-22000a1cda92" xmlns:tm="http://www.ubrea.com/xforms" >
<inputs>
<Number_Non_Barcode>mnbcdsddsd3455</Number_Non_Barcode>
<VIN>
  <Non_Barcode>xyz</Non_Barcode>
  <ODO>1425788</ODO>      
</VIN>
</inputs>
</instance>'
declare @sql nvarchar(max)
declare @xmlns varchar(max)
set @xmlns=''''+SUBSTRING(cast(@xmldata as varchar(max)),CHARINDEX('http://www.ubrea.com/xforms/',cast(@xmldata as varchar(max)),1),CHARINDEX('" xmlns:dm',cast(@xmldata as varchar(max)),1)-18)+''''
set @sql='
declare @xmldata xml
set @xmldata = '''+cast(@xmldata as varchar(max))+'''
begin try
;WITH XMLNAMESPACES 
(
    DEFAULT ' + @xmlns +
     ','+'''http://www.ubrea.com/xforms''' + ' as fm 
)
select
    Number_Non_Barcode, Non_Barcode, ODO, Code
from (
select          
    x.c.value(''(../../Number_Non_Barcode)[1]'', ''varchar(100)'') as Number_Non_Barcode,       
    x.c.value(''(../Non_Barcode)[1]'', ''varchar(100)'') as Non_Barcode,
    x.c.value(''(../ODO)[1]'', ''varchar(100)'') as ODO,
    x.c.value(''(Code)[1]'', ''varchar(100)'') as Code      
from @xmldata.nodes(''/instance/inputs/VIN/Defect'') x(c)
) x  

end try
begin catch
select ERROR_NUMBER() Code, ERROR_MESSAGE() Message
end catch'
exec sp_executesql @sql;

如果 不可用,如何進行查詢,結果應該是這樣的:

How to make Query if <Defect> not available and the result should like this:

Number_Non_Barcode  Non_Barcode   ODO         Defect_Code
mnbcdsddsd3455      xyz           1425788      NULL

我對 xml 查詢不太熟悉,似乎找不到如何執行此操作的示例.任何幫助,將不勝感激.謝謝

I'm not real familiar with xml query and can't seem to find an example of how to do it. Any help would be appreciated. Thanks

推薦答案

我猜你的動態查詢在那里是因為你不知道默認的命名空間.相反,您可以使用 * 在 XQuery 中指定名稱空間.

I guess that your dynamic query is there because the default namespace is unknown to you. Instead you can specify the namespace in the XQuery using *.

使用父軸 .. 可以通過在幾個步驟中使用 nodes()cross apply 分解 XML 來避免.由于 Defect 節點可能會丟失,因此在粉碎這些節點時必須使用 outer apply.

Using the parent axis .. can be avoided by shredding the XML using nodes() and cross apply in several steps. Since the Defect node can be missing you have to use outer apply when shredding those nodes.

select I.X.value('(*:Number_Non_Barcode/text())[1]', 'varchar(100)') as Number_Non_Barcode,
       V.X.value('(*:Non_Barcode/text())[1]', 'varchar(100)') as Non_Barcode,
       V.X.value('(*:ODO/text())[1]', 'varchar(100)') as ODO,
       D.X.value('(*:Code/text())[1]', 'varchar(100)') as Code
from @XMLData.nodes('/*:instance/*:inputs') as I(X)
  cross apply I.X.nodes('*:VIN') as V(X)
  outer apply V.X.nodes('*:Defect') as D(X)

SQL 小提琴

這篇關于SQL SERVER:如何從 XML 文件進行查詢的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,也希望大家多多支持html5模板網!

【網站聲明】本站部分內容來源于互聯網,旨在幫助大家更快的解決問題,如果有圖片或者內容侵犯了您的權益,請聯系我們刪除處理,感謝您的支持!

相關文檔推薦

Converting Every Child Tags in to a Single Column with multiple Delimiters -SQL Server (3)(將每個子標記轉換為具有多個分隔符的單列-SQL Server (3))
How can I create a view from more than one table?(如何從多個表創建視圖?)
Create calculated value based on calculated value inside previous row(根據前一行內的計算值創建計算值)
How do I stack the first two columns of a table into a single column, but also pair third column with the first column only?(如何將表格的前兩列堆疊成一列,但也僅將第三列與第一列配對?) - IT屋-程序員軟件開發技
Recursive t-sql query(遞歸 t-sql 查詢)
Convert Month Name to Date / Month Number (Combinations of Questions amp; Answers)(將月份名稱轉換為日期/月份編號(問題和答案的組合))
主站蜘蛛池模板: 精品久久久久久久 | 亚洲品质自拍视频网站 | 午夜精品福利视频 | 久久99精品国产麻豆婷婷 | 欧美在线亚洲 | 亚洲精品亚洲人成人网 | 欧美成人性生活 | h视频在线播放 | 精品蜜桃一区二区三区 | 成人一区二区三区 | 精品一区久久 | 全部免费毛片在线播放网站 | 久色网| 中文字幕蜜臀 | 综合第一页 | 欧美在线网站 | a在线免费观看视频 | 国产精品久久久久久网站 | 国产精品无码专区在线观看 | 欧美日韩在线视频观看 | 三级特黄特色视频 | 青青草精品| 国产中文字幕在线 | 日韩免费视频 | 一级片网址 | 亚洲综合日韩精品欧美综合区 | 久久成人精品视频 | 国产精品久久久久久久久久久久午夜片 | 99亚洲精品 | 国产人成精品一区二区三 | 欧美精品一二三 | 成人午夜 | 老司机深夜福利网站 | 99re热精品视频 | 久久国产视频网 | 蜜臀网| 国产观看 | 免费一级片 | 91精品久久久久久久久久 | 91精品国产91久久久久久 | 日本免费在线看 |