Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
XQuery stöder följande operatorer:
Numeriska operatorer (+, -, *, div, mod)
Operatorer för värdejämförelse (eq, ne, lt, gt, le, ge)
Operatorer för allmän jämförelse ( =, !=, <, >, <=, >= )
Mer information om dessa operatorer finns i Jämförelseuttryck (XQuery)
Exempel
A. Använda allmänna operatorer
Frågan illustrerar användningen av allmänna operatorer som gäller för sekvenser och även för att jämföra sekvenser. Frågan hämtar en sekvens med telefonnummer för varje kund från kolumnen AdditionalContactInfo i tabellen Kontakt. Den här sekvensen jämförs sedan med sekvensen med två telefonnummer ("111-111-1111", "222-2222").
Frågan använder = jämförelseoperator. Varje nod i sekvensen på höger sida av =-operatorn jämförs med varje nod i sekvensen till vänster. Om noderna matchar är nodjämförelsen TRUE. Den konverteras sedan till en int och jämförs med 1, och frågan returnerar kund-ID:t.
WITH XMLNAMESPACES (
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactInfo' AS ACI,
'https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ContactTypes' AS ACT)
SELECT ContactID
FROM Person.Contact
WHERE AdditionalContactInfo.value('
//ACI:AdditionalContactInfo//ACT:telephoneNumber/ACT:number =
("111-111-1111", "222-2222")',
'bit')= cast(1 as bit)
Det finns ett annat sätt att se hur den tidigare frågan fungerar: Varje telefonnummervärde som hämtas från kolumnen AdditionalContactInfo jämförs med uppsättningen med två telefonnummer. Om värdet finns i uppsättningen returneras den kunden i resultatet.
B. Använda en numerisk operator
Operatorn + i den här frågan är en värdeoperator eftersom den gäller för ett enskilt objekt. Till exempel läggs värdet 1 till i en partistorlek som returneras av frågan:
SELECT ProductModelID, Instructions.query('
declare namespace
AWMI="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelManuInstructions";
for $i in (/AWMI:root/AWMI:Location)[1]
return
<Location LocationID="{ ($i/@LocationID) }"
LotSize = "{ number($i/@LotSize) }"
LotSize2 = "{ number($i/@LotSize) + 1 }"
LotSize3 = "{ number($i/@LotSize) + 2 }" >
</Location>
') as Result
FROM Production.ProductModel
where ProductModelID=7
C. Använda en värdeoperator
Följande fråga hämtar de <Picture> elementen för en produktmodell där bildstorleken är "liten":
SELECT CatalogDescription.query('
declare namespace PD="https://schemas.microsoft.com/sqlserver/2004/07/adventure-works/ProductModelDescription";
for $P in /PD:ProductDescription/PD:Picture[PD:Size eq "small"]
return
$P
') as Result
FROM Production.ProductModel
where ProductModelID=19
Eftersom båda operanderna till eq operatorn är atomiska värden, används värdeoperatorn i frågan. Du kan skriva samma fråga med hjälp av den allmänna jämförelseoperatorn ( = ).