sql >> Database teknologi >  >> RDS >> Sqlserver

Sådan fungerer SCHEMA_ID() i SQL Server

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)

  1. Indsættelse af en liste<> i SQL Server-tabel

  2. Er der nogen forskel mellem !=og <> i Oracle Sql?

  3. Kan den Oracle-administrerede driver bruge async/afvent korrekt?

  4. Enhver måde at vælge uden at forårsage låsning i MySQL?