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.