Freigeben über


XML Schema Collections i SQL Server 2005

När man jobbar med datatypen XML i SQL Server 2005 så är det kanske inte alltid man vill jobba med otypad XML. Dels på grund av att man inte vill att vad som helst ska kunna lagras i en tabellkolumn och dels för att prestanda blir lite sämre.

Väljer man att "typa" sin kolumn, dvs att applicera ett XSD schema mot XML:en så stramar man åt utseendet på det som kan lagras men får även bättre prestanda. Schemahanteringen i SQL Server 2005 sker med hjälp av "XML Schema Collections" som är en samling av en eller flera XSD scheman. Denna kollektion kan sedan appliceras på en eller flera kolumner i en eller flera tabeller där datatypen är XML. Det går även bra att mappa denna kollektion mot en inparameter till en lagrad procedur eller en lokal variabel om så önskas.

Att skapa dessa kollektioner är enkelt, problemet som uppstår däremot är att vill man titta på hur ett schema ser ut så kan detta inte göras från Management Studio utan kan enbart göras via frågefönstret.

Detta görs genom att använda en inbyggd funktion som heter xml_schema_namespace och den används på följande vis:

SELECT xml_schema_namespace("Relational Schema Name", "XML Schema Colletion name")

Som ni ser så tar funktionen två parametrar, den första är det schema i databasen som kollektionen tillhör och den andra är namnet på själva kollektionen. Är man den som skapat kollektionen så vet man oftast i vilket relationsschema som kollektionen skapats i, men kommer man utifrån som utvecklare så är det kanske inte lika självklart.

Lösningen på detta är att köra följande script som listar alla kollektioner i en databas och det relationsschema som de tillhör.

SELECT s.name as RelationalSchemaName, sc.name as XMLSchemaCollectionName
FROM sys.xml_schema_collections sc
INNER JOIN sys.schemas s ON sc.schema_id = s.schema_id

Nu kan man enkelt via dessa två script lista alla XML-schemakollektioner och deras innehåll.

Comments

  • Anonymous
    May 17, 2005
    André,

    Hur mycket skillnad i prestanda snackar vi om vid jämförelse mellan en typad och en otypad kolumn i SQL Server 2005, innehållande XML? Utgår ifrån att man måste komma upp i högt antal poster / storlek på innehåll innan man kan göra några märkbara vinster?
  • Anonymous
    May 18, 2005
    Jättebra fråga och det finns inget enkelt svar. Det bästa vore om man kunde säga att typat innebär 10% bättre presetanda men så fungerar det inte tyvärr.

    Precis som du skriver så spelar storleken på XML:en in samt antalet rader. Men även storleken på själva schemat spelar in och även hur man ställer frågorna.

    I de flesta fall så kombineras en typad kolumn med ett index på XML-kolumnen vilket ger i de flesta fall klart bättre prestanda om man hämtar fragment av det lagrade XML-dokumentet.

    Jobbar man med hela XML-dokumentet som är lagrat i en kolumn så vinner man inget prestandamässigt utan det är först när man manipulerar eller söker ut delar av dokumentet som det slår igenom.

    Jag borde lagt till det i mitt initiala inlägg, mycket bra kommentar!