Sqlserver
 sql >> Datenbank >  >> RDS >> Sqlserver

Funktionsweise von SCHEMA_ID() in SQL Server

In SQL Server können Sie die SCHEMA_ID() verwenden Funktion, um die ID eines bestimmten Schemas zurückzugeben. Genauer gesagt gibt diese Funktion die Schema-ID zurück, die einem Schemanamen zugeordnet ist.

Es ist wie SCHEMA_NAME() außer dass es die ID des Schemas anstelle des Namens zurückgibt (und es akzeptiert den Namensparameter anstelle der ID).

Wenn Sie der Funktion keinen Schemanamen übergeben, gibt sie die ID des Standardschemas des Aufrufers zurück.

Beispiel 1 – Standardschema zurückgeben

Hier ist ein Beispiel, das die ID des Standardschemas des Aufrufers zurückgibt.

SELECT SCHEMA_ID() AS Result;

Ergebnis:

+----------+
| Result   |
|----------|
| 1        |
+----------+

Dies gibt die ID des Standardschemas des Aufrufers zurück, da ich keinen anderen Schemanamen explizit angegeben habe.

Hier ist es noch einmal, zusammen mit dem Schemanamen.

SELECT 
  SCHEMA_ID() AS [Schema ID],
  SCHEMA_NAME() AS [Schema Name];

Ergebnis:

+-------------+---------------+
| Schema ID   | Schema Name   |
|-------------+---------------|
| 1           | dbo           |
+-------------+---------------+

Beispiel 2 – Geben Sie ein anderes Schema an

In diesem Beispiel übergebe ich explizit einen Schemanamen an die Funktion.

SELECT SCHEMA_ID('Dimension') AS Result;

Ergebnis:

+----------+
| Result   |
|----------|
| 6        |
+----------+

Das sagt mir, dass das Schema namens Dimension eine ID von 6 hat.

Beispiel 3 – Datenbankwechsel

Das vorherige Beispiel wurde zufällig in einer Datenbank ausgeführt, die ein Schema namens Dimension hatte. Wenn ich zu einer anderen Datenbank wechsle, erhalte ich möglicherweise eine andere Schema-ID oder überhaupt keine ID.

Hier ist ein Beispiel dafür, was ich meine.

USE WideWorldImportersDW;
SELECT SCHEMA_ID('Dimension') AS Result;

USE Music;
SELECT SCHEMA_ID('Dimension') AS Result;

Ergebnis:

Changed database context to 'WideWorldImportersDW'.
+----------+
| Result   |
|----------|
| 6        |
+----------+
(1 row affected)
Changed database context to 'Music'.
+----------+
| Result   |
|----------|
| NULL     |
+----------+
(1 row affected)

Das zweite Ergebnis gibt NULL zurück weil es kein Schema namens Dimension in der Musikdatenbank gibt.

Beispiel 4 – In einer WHERE-Klausel

Verwenden von SCHEMA_ID() in einem WHERE -Klausel kann eine praktische Möglichkeit sein, die Ergebnisse nach Schema zu filtern.

In SQL Server verwenden verschiedene Systemansichten eine schema_id Spalte zum Speichern der Schema-ID, aber nicht des Schemanamens. Daher müssen Sie die Schema-ID kennen, wenn Sie die Ergebnisse nach Schema filtern möchten. Dort steht SCHEMA_ID() kann sehr nützlich sein. Es erspart Ihnen, einen Join an den sys.schemas vorzunehmen ansehen, um den Schemanamen herauszufinden.

Hier ist ein Beispiel für die Verwendung von SCHEMA_ID() in einem WHERE Klausel.

USE WideWorldImportersDW;
SELECT 
  name,
  type_desc 
FROM sys.objects
WHERE schema_id = SCHEMA_ID('Dimension');

Ergebnis:

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)