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)