I SQL Server kan du bruge SCHEMA_ID()
funktion for at returnere ID'et for et givet skema. Mere specifikt returnerer denne funktion det skema-id, der er knyttet til et skemanavn.
Det er ligesom SCHEMA_NAME()
bortset fra, at det returnerer skemaets ID i stedet for navnet (og det accepterer navneparameteren i stedet for ID).
Hvis du ikke sender et skemanavn til funktionen, returnerer det ID'et for standardskemaet for den, der ringer.
Eksempel 1 – Returner standardskema
Her er et eksempel, der returnerer ID'et for standardskemaet for den, der ringer.
SELECT SCHEMA_ID() AS Result;
Resultat:
+----------+ | Result | |----------| | 1 | +----------+
Dette returnerer ID'et for standardskemaet for den, der ringer, fordi jeg ikke eksplicit har angivet noget andet skemanavn.
Her er det igen sammen med skemanavnet.
SELECT SCHEMA_ID() AS [Schema ID], SCHEMA_NAME() AS [Schema Name];
Resultat:
+-------------+---------------+ | Schema ID | Schema Name | |-------------+---------------| | 1 | dbo | +-------------+---------------+
Eksempel 2 – Angiv et andet skema
I dette eksempel giver jeg eksplicit et skemanavn til funktionen.
SELECT SCHEMA_ID('Dimension') AS Result;
Resultat:
+----------+ | Result | |----------| | 6 | +----------+
Dette fortæller mig, at skemaet kaldet Dimension har et ID på 6.
Eksempel 3 – Skift database
Det forrige eksempel blev tilfældigvis kørt i en database, der havde et skema kaldet Dimension. Hvis jeg skifter til en anden database, får jeg muligvis et andet skema-id eller slet intet id.
Her er et eksempel på, hvad jeg mener.
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 andet resultat returnerer NULL
fordi der ikke er noget skema kaldet Dimension i musikdatabasen.
Eksempel 4 – I en WHERE-klausul
Bruger SCHEMA_ID()
i en WHERE
klausul kan være en praktisk måde at filtrere resultaterne efter skema.
I SQL Server bruger forskellige systemvisninger en schema_id
kolonne for at gemme skema-id'et, men ikke skemanavnet. Derfor skal du kende skema-id'et, hvis du skal filtrere resultaterne efter skema. Det er her SCHEMA_ID()
kan være meget nyttigt. Det sparer dig for at skulle deltage på sys.schemas
se blot for at finde ud af skemanavnet.
Her er et eksempel på brug af 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)