W SQL Server możesz użyć SCHEMA_ID()
funkcja zwracająca identyfikator danego schematu. Dokładniej, ta funkcja zwraca identyfikator schematu skojarzony z nazwą schematu.
To jak SCHEMA_NAME()
z wyjątkiem tego, że zwraca identyfikator schematu zamiast nazwy (i akceptuje parametr name zamiast identyfikatora).
Jeśli nie przekażesz nazwy schematu do funkcji, zwraca ona identyfikator domyślnego schematu wywołującego.
Przykład 1 – Zwróć domyślny schemat
Oto przykład, który zwraca identyfikator domyślnego schematu wywołującego.
SELECT SCHEMA_ID() AS Result;
Wynik:
+----------+ | Result | |----------| | 1 | +----------+
Zwraca to identyfikator domyślnego schematu wywołującego, ponieważ nie określiłem jawnie żadnej innej nazwy schematu.
Oto znowu, wraz z nazwą schematu.
SELECT SCHEMA_ID() AS [Schema ID], SCHEMA_NAME() AS [Schema Name];
Wynik:
+-------------+---------------+ | Schema ID | Schema Name | |-------------+---------------| | 1 | dbo | +-------------+---------------+
Przykład 2 – Określ inny schemat
W tym przykładzie jawnie przekazuję nazwę schematu do funkcji.
SELECT SCHEMA_ID('Dimension') AS Result;
Wynik:
+----------+ | Result | |----------| | 6 | +----------+
To mówi mi, że schemat o nazwie Dimension ma identyfikator 6.
Przykład 3 – Przełączanie baz danych
Poprzedni przykład został uruchomiony w bazie danych, która miała schemat o nazwie Dimension. Jeśli przełączę się na inną bazę danych, mogę otrzymać inny identyfikator schematu lub wcale.
Oto przykład tego, co mam na myśli.
USE WideWorldImportersDW; SELECT SCHEMA_ID('Dimension') AS Result; USE Music; SELECT SCHEMA_ID('Dimension') AS Result;
Wynik:
Changed database context to 'WideWorldImportersDW'. +----------+ | Result | |----------| | 6 | +----------+ (1 row affected) Changed database context to 'Music'. +----------+ | Result | |----------| | NULL | +----------+ (1 row affected)
Drugi wynik zwraca NULL
ponieważ w bazie danych muzyki nie ma schematu o nazwie Dimension.
Przykład 4 – W klauzuli WHERE
Używanie SCHEMA_ID()
w WHERE
klauzula może być wygodnym sposobem filtrowania wyników według schematu.
W SQL Server różne widoki systemowe używają schema_id
kolumna do przechowywania identyfikatora schematu, ale nie nazwy schematu. Dlatego musisz znać identyfikator schematu, jeśli zamierzasz filtrować wyniki według schematu. To właśnie tam SCHEMA_ID()
może być bardzo przydatne. Dzięki temu nie musisz wykonywać dołączania do sys.schemas
Widok tylko po to, aby wypracować nazwę schematu.
Oto przykład użycia SCHEMA_ID()
w WHERE
klauzula.
USE WideWorldImportersDW; SELECT name, type_desc FROM sys.objects WHERE schema_id = SCHEMA_ID('Dimension');
Wynik:
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)