Sqlserver
 sql >> Baza danych >  >> RDS >> Sqlserver

Jak SCHEMA_ID() działa w SQL Server

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)

  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jak uzyskać dane wyjściowe eksportu w rzeczywistym formacie CSV w SQL Server Management Studio?

  2. Pomyślnie nawiązano połączenie z serwerem, ale podczas uzgadniania przed logowaniem wystąpił błąd

  3. równoważne typy danych mysql

  4. Przykład z życia, kiedy używać OUTER / CROSS APPLY w SQL

  5. Jak zainstalować program SQL Server na komputerze Mac M1 (ARM64)