Sök…


Gå med i tabellrader med dynamiskt genererade rader från en cell

Med CROSS APPLY kan du "gå med" rader från en tabell med dynamiskt genererade rader som returneras av någon tabellvärdesfunktion.

Föreställ dig att du har en företagstabell med en kolumn som innehåller en serie produkter (ProductList-kolumn) och en funktion som analyserar dessa värden och returnerar en uppsättning produkter. Du kan välja alla rader från en företagstabell, tillämpa den här funktionen i en kolumn med produktlista och "gå med" genererade resultat med moderbolagets rad:

SELECT *
FROM Companies c 
     CROSS APPLY dbo.GetProductList( c.ProductList ) p

För varje rad tillhandahålls värdet på ProductList- cellen till funktionen och funktionen returnerar dessa produkter som en uppsättning rader som kan förenas med överordnade rad.

Gå med i tabellrader med JSON-array lagrad i cellen

Med CROSS APPLY kan du "gå med" rader från en tabell med samling av JSON-objekt lagrade i en kolumn.

Föreställ dig att du har en företagstabell med en kolumn som innehåller en matris med produkter (ProductList-kolumn) som är formaterade som JSON-matris. OPENJSON-tabellvärdesfunktionen kan analysera dessa värden och returnera uppsättningen av produkter. Du kan välja alla rader från en företagstabell, analysera JSON-produkter med OPENJSON och "gå med" genererade resultat med moderbolagets rad:

SELECT *
FROM Companies c 
     CROSS APPLY OPENJSON( c.ProductList )
                 WITH ( Id int, Title nvarchar(30), Price money)

För varje rad tillhandahålls värdet på ProductList- cellen till OPENJSON-funktionen som förvandlar JSON-objekt till rader med schemat definierat i MED-klausulen.

Filtrera rader efter matrisvärden

Om du lagrar en lista med taggar i rad som comaseparerade värden gör STRING_SPLIT- funktionen möjlighet att omvandla listan med taggar till en värdetabell. CROSS APPLY gör det möjligt att "gå med" värden som analyseras med funktionen STRING_SPLIT med en överordnad rad.

Föreställ dig att du har en produkttabell med en kolumn som innehåller en rad kommaseparerade taggar (t.ex. promo, försäljning, ny). STRING_SPLIT och CROSS APPLY gör att du kan gå med i produktrader med deras taggar så att du kan filtrera produkter efter taggar:

SELECT *
FROM Products p 
     CROSS APPLY STRING_SPLIT( p.Tags, ',' ) tags
WHERE tags.value = 'promo'

För varje rad, kommer värdet av etiketter cell lämnas till STRING_SPLIT funktion som kommer att återvända taggvärden. Sedan kan du filtrera rader efter dessa värden.

Obs: STRING_SPLIT- funktionen är inte tillgänglig före SQL Server 2016



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow