sql >> Database >  >> RDS >> Sqlserver

Hoe SCHEMA_ID() werkt in SQL Server

In SQL Server kunt u de SCHEMA_ID() . gebruiken functie om de ID van een bepaald schema te retourneren. Meer specifiek retourneert deze functie de schema-ID die is gekoppeld aan een schemanaam.

Het is als SCHEMA_NAME() behalve dat het de ID van het schema retourneert in plaats van de naam (en het accepteert de parameter name in plaats van ID).

Als u geen schemanaam doorgeeft aan de functie, wordt de ID van het standaardschema van de aanroeper geretourneerd.

Voorbeeld 1 – Standaardschema retourneren

Hier is een voorbeeld dat de ID van het standaardschema van de beller retourneert.

SELECT SCHEMA_ID() AS Result;

Resultaat:

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

Dit retourneert de ID van het standaardschema van de beller omdat ik niet expliciet een andere schemanaam heb opgegeven.

Hier is het weer, samen met de naam van het schema.

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

Resultaat:

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

Voorbeeld 2 – Specificeer een ander schema

In dit voorbeeld geef ik expliciet een schemanaam door aan de functie.

SELECT SCHEMA_ID('Dimension') AS Result;

Resultaat:

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

Dit vertelt me ​​​​dat het schema met de naam Dimension een ID van 6 heeft.

Voorbeeld 3 – Van database wisselen

Het vorige voorbeeld werd toevallig uitgevoerd in een database met een schema met de naam Dimension. Als ik overschakel naar een andere database, krijg ik mogelijk een andere schema-ID of helemaal geen ID.

Hier is een voorbeeld van wat ik bedoel.

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

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

Resultaat:

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

Het tweede resultaat retourneert NULL omdat er geen schema met de naam Dimensie in de muziekdatabase staat.

Voorbeeld 4 – In een WHERE-clausule

SCHEMA_ID() gebruiken in een WHERE clausule kan een handige manier zijn om de resultaten op schema te filteren.

In SQL Server gebruiken verschillende systeemweergaven een schema_id kolom om de schema-ID op te slaan, maar niet de schemanaam. Daarom moet u de schema-ID weten als u de resultaten op schema wilt filteren. Dat is waar SCHEMA_ID() kan erg handig zijn. Het voorkomt dat u een join hoeft te doen op de sys.schemas bekijken om de naam van het schema te bepalen.

Hier is een voorbeeld van het gebruik van SCHEMA_ID() in een WHERE clausule.

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

Resultaat:

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. Mysql:Bestellen op like?

  2. Wat is de meest elegante manier om een ​​tijdstempel met nanosec op te slaan in postgresql?

  3. UTC_DATE Voorbeelden - MySQL

  4. T-SQL - Aliasing met =versus as