I SQL Server kan du använda SCHEMA_ID()
funktion för att returnera ID:t för ett givet schema. Mer specifikt returnerar den här funktionen schema-ID som är kopplat till ett schemanamn.
Det är som SCHEMA_NAME()
förutom att den returnerar schemats ID istället för namnet (och den accepterar namnparametern istället för ID).
Om du inte skickar ett schemanamn till funktionen returnerar den ID:t för standardschemat för den som ringer.
Exempel 1 – Return Default Schema
Här är ett exempel som returnerar ID:t för standardschemat för den som ringer.
SELECT SCHEMA_ID() AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Detta returnerar ID:t för standardschemat för den som ringer eftersom jag inte uttryckligen angav något annat schemanamn.
Här är den igen, tillsammans med schemanamnet.
SELECT SCHEMA_ID() AS [Schema ID], SCHEMA_NAME() AS [Schema Name];
Resultat:
+-------------+---------------+ | Schema ID | Schema Name | |-------------+---------------| | 1 | dbo | +-------------+---------------+
Exempel 2 – Ange ett annat schema
I det här exemplet skickar jag uttryckligen ett schemanamn till funktionen.
SELECT SCHEMA_ID('Dimension') AS Result;
Resultat:
+----------+ | Result | |----------| | 6 | +----------+
Detta säger mig att schemat som heter Dimension har ett ID på 6.
Exempel 3 – Byta databas
Det tidigare exemplet råkade köras i en databas som hade ett schema som heter Dimension. Om jag byter till en annan databas kan jag få ett annat schema-ID eller inget ID alls.
Här är ett exempel på vad jag menar.
USE WideWorldImportersDW; SELECT SCHEMA_ID('Dimension') AS Result; USE Music; SELECT SCHEMA_ID('Dimension') AS Result;
Resultat:
Changed database context to 'WideWorldImportersDW'. +----------+ | Result | |----------| | 6 | +----------+ (1 row affected) Changed database context to 'Music'. +----------+ | Result | |----------| | NULL | +----------+ (1 row affected)
Det andra resultatet returnerar NULL
eftersom det inte finns något schema som heter Dimension i musikdatabasen.
Exempel 4 – I en WHERE-klausul
Använder SCHEMA_ID()
i en WHERE
klausul kan vara ett praktiskt sätt att filtrera resultaten efter schema.
I SQL Server använder olika systemvyer ett schema_id
kolumn för att lagra schema-ID men inte schemanamnet. Därför måste du känna till schema-ID om du ska filtrera resultaten efter schema. Det är där SCHEMA_ID()
kan vara mycket användbart. Det sparar dig från att behöva göra en join på sys.schemas
visa bara för att räkna ut schemanamnet.
Här är ett exempel på hur du använder SCHEMA_ID()
i en WHERE
klausul.
USE WideWorldImportersDW; SELECT name, type_desc FROM sys.objects WHERE schema_id = SCHEMA_ID('Dimension');
Resultat:
Changed database context to 'WideWorldImportersDW'. +----------------------------------------------------+------------------------+ | name | type_desc | |----------------------------------------------------+------------------------| | City | USER_TABLE | | PK_Dimension_City | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_City_City_Key | DEFAULT_CONSTRAINT | | Customer | USER_TABLE | | PK_Dimension_Customer | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Customer_Customer_Key | DEFAULT_CONSTRAINT | | Date | USER_TABLE | | PK_Dimension_Date | PRIMARY_KEY_CONSTRAINT | | Employee | USER_TABLE | | PK_Dimension_Employee | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Employee_Employee_Key | DEFAULT_CONSTRAINT | | Payment Method | USER_TABLE | | PK_Dimension_Payment_Method | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Payment_Method_Payment_Method_Key | DEFAULT_CONSTRAINT | | Stock Item | USER_TABLE | | PK_Dimension_Stock_Item | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Stock_Item_Stock_Item_Key | DEFAULT_CONSTRAINT | | Supplier | USER_TABLE | | PK_Dimension_Supplier | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Supplier_Supplier_Key | DEFAULT_CONSTRAINT | | Transaction Type | USER_TABLE | | PK_Dimension_Transaction_Type | PRIMARY_KEY_CONSTRAINT | | DF_Dimension_Transaction_Type_Transaction_Type_Key | DEFAULT_CONSTRAINT | +----------------------------------------------------+------------------------+ (23 rows affected)