Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
İlişkisel veritabanlarında sıra kavramı yoktur. Örneğin, "Veritabanından ilk müşteriyi al" gibi bir istekte bulunamazsınız. Ancak, bir XML belgesini sorgulayabilir ve ilk <Customer> öğesini alabilirsiniz. Ardından her zaman aynı müşteriyi alırsınız.
Bu konu başlığında, düğümlerin belgede göründüğü sırayı temel alan sorgular gösterilmektedir.
Örnekler
A. Bir ürünün ikinci iş merkezi konumunda üretim adımlarını alma
Belirli bir ürün modeli için aşağıdaki sorgu, üretim sürecindeki bir dizi iş merkezi konumundaki ikinci iş merkezi konumundaki üretim adımlarını alır.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<ManuStep ProdModelID = "{sql:column("Production.ProductModel.ProductModelID")}"
ProductModelName = "{ sql:column("Production.ProductModel.Name") }" >
<Location>
{ (//AWMI:root/AWMI:Location)[2]/@* }
<Steps>
{ for $s in (//AWMI:root/AWMI:Location)[2]//AWMI:step
return
<Step>
{ string($s) }
</Step>
}
</Steps>
</Location>
</ManuStep>
') as Result
FROM Production.ProductModel
WHERE ProductModelID=7
Önceki sorgudan aşağıdakilere dikkat edin:
Küme ayraçlarındaki ifadeler, değerlendirmesinin sonucuyla değiştirilir. Daha fazla bilgi için bkz. XML Oluşturma (XQuery).
@* ikinci iş merkezi konumunun tüm özniteliklerini alır.
FLWOR yinelemesi (FOR ... RETURN) ikinci iş merkezi konumunun <
step> tüm alt öğelerini alır.sql:column() işlevi (XQuery), oluşturulan XML'deki ilişkisel değeri içerir.
Sonuç şu şekildedir:
<ManuStep ProdModelID="7" ProductModelName="HL Touring Frame">
<Location LocationID="20" SetupHours="0.15"
MachineHours="2" LaborHours="1.75" LotSize="1">
<Steps>
<Step>Assemble all frame components following blueprint 1299.</Step>
...
</Steps>
</Location>
</ManuStep>
Önceki sorgu yalnızca metin düğümlerini alır. Bunun yerine tüm <step> öğenin döndürülmesini istiyorsanız string () işlevini sorgudan kaldırın:
B. Bir ürünün üretiminde ikinci iş merkezi konumunda kullanılan tüm malzeme ve araçları bulun
Belirli bir ürün modeli için aşağıdaki sorgu, üretim sürecindeki iş merkezi konumları sırasına göre ikinci iş merkezi konumunda kullanılan araçları ve malzemeleri alır.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<Location>
{ (//AWMI:root/AWMI:Location)[1]/@* }
<Tools>
{ for $s in (//AWMI:root/AWMI:Location)[1]//AWMI:step//AWMI:tool
return
<Tool>
{ string($s) }
</Tool>
}
</Tools>
<Materials>
{ for $s in (//AWMI:root/AWMI:Location)[1]//AWMI:step//AWMI:material
return
<Material>
{ string($s) }
</Material>
}
</Materials>
</Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7
Önceki sorgudan aşağıdakilere dikkat edin:
Sorgu, öğesini oluşturur
<Location>ve öznitelik değerlerini veritabanından alır.İki FLWOR kullanır (... dönüş) yinelemeleri: biri araçları almak için, diğeri de kullanılan malzemeyi almak için.
Sonuç şu şekildedir:
<Location LocationID="10" SetupHours=".5"
MachineHours="3" LaborHours="2.5" LotSize="100">
<Tools>
<Tool>T-85A framing tool</Tool>
<Tool>Trim Jig TJ-26</Tool>
<Tool>router with a carbide tip 15</Tool>
<Tool>Forming Tool FT-15</Tool>
</Tools>
<Materials>
<Material>aluminum sheet MS-2341</Material>
</Materials>
</Location>
C. Ürün kataloğundan ilk iki ürün özelliği açıklamasını alma
Belirli bir ürün modeli için sorgu, ürün modeli kataloğundaki öğesinden <Features> ilk iki özellik açıklamasını alır.
SELECT CatalogDescription.query('
declare namespace p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
<ProductModel ProductModelID= "{ data( (/p1:ProductDescription/@ProductModelID)[1] ) }"
ProductModelName = "{ data( (/p1:ProductDescription/@ProductModelName)[1] ) }" >
{
for $F in /p1:ProductDescription/p1:Features
return
$F/*[position() <= 2]
}
</ProductModel>
') as x
FROM Production.ProductModel
where ProductModelID=19
Önceki sorgudan aşağıdakilere dikkat edin:
Sorgu gövdesi, ProductModelID ve ProductModelName özniteliklerine sahip öğeyi içeren <ProductModel> XML'yi oluşturur.
- Sorgu for ... Ürün modeli özellik açıklamalarını almak için RETURN döngüsü. position() işlevi ilk iki özelliği almak için kullanılır.
Sonuç şu şekildedir:
<ProductModel ProductModelID="19" ProductModelName="Mountain 100">
<p1:Warranty
xmlns:p1="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p1:WarrantyPeriod>3 year</p1:WarrantyPeriod>
<p1:Description>parts and labor</p1:Description>
</p1:Warranty>
<p2:Maintenance
xmlns:p2="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelWarrAndMain">
<p2:NoOfYears>10</p2:NoOfYears>
<p2:Description>maintenance contact available through your dealer
or any AdventureWorks retail store.
</p2:Description>
</p2:Maintenance>
</ProductModel>
D. Ürünün üretim sürecinde ilk iş merkezi konumunda kullanılan ilk iki aracı bulma
Bir ürün modeli için bu sorgu, üretim sürecindeki iş merkezi konumları dizisindeki ilk iş merkezi konumunda kullanılan ilk iki aracı döndürür. Sorgu, Production.ProductModel tablosunun Instructions sütununda depolanan üretim yönergelerine göre belirtilir.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $Inst in (//AWMI:root/AWMI:Location)[1]
return
<Location>
{ $Inst/@* }
<Tools>
{ for $s in ($Inst//AWMI:step//AWMI:tool)[position() <= 2]
return
<Tool>
{ string($s) }
</Tool>
}
</Tools>
</Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7
Sonuç şu şekildedir:
<Location LocationID="10" SetupHours=".5"
MachineHours="3" LaborHours="2.5" LotSize="100">
<Tools>
<Tool>T-85A framing tool</Tool>
<Tool>Trim Jig TJ-26</Tool>
</Tools>
</Location>
E. Belirli bir ürünün üretimindeki ilk iş merkezi konumunda son iki üretim adımını bulma
Sorgu, son iki üretim adımını almak için last() işlevini kullanır.
SELECT Instructions.query('
declare namespace AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
<LastTwoManuSteps>
<Last-1Step>
{ (/AWMI:root/AWMI:Location)[1]/AWMI:step[(last()-1)]/text() }
</Last-1Step>
<LastStep>
{ (/AWMI:root/AWMI:Location)[1]/AWMI:step[last()]/text() }
</LastStep>
</LastTwoManuSteps>') as Result
FROM Production.ProductModel
where ProductModelID=7
Sonuç şu şekildedir:
<LastTwoManuSteps>
<Last-1Step>When finished, inspect the forms for defects per
Inspection Specification .</Last-1Step>
<LastStep>Remove the frames from the tool and place them in the
Completed or Rejected bin as appropriate.</LastStep>
</LastTwoManuSteps>
Ayrıca Bkz.
XML Verileri (SQL Server)
XQuery Dil Referansı (SQL Server)
XML Yapısı (XQuery)