sql >> Databasteknik >  >> RDS >> Sqlserver

Hur SCHEMA_ID() fungerar i SQL Server

I SQL Server kan du använda SCHEMA_ID() funktion för att returnera ID:t för ett givet schema. Mer specifikt returnerar den här funktionen schema-ID som är kopplat till ett schemanamn.

Det är som SCHEMA_NAME() förutom att den returnerar schemats ID istället för namnet (och den accepterar namnparametern istället för ID).

Om du inte skickar ett schemanamn till funktionen returnerar den ID:t för standardschemat för den som ringer.

Exempel 1 – Return Default Schema

Här är ett exempel som returnerar ID:t för standardschemat för den som ringer.

SELECT SCHEMA_ID() AS Result;

Resultat:

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

Detta returnerar ID:t för standardschemat för den som ringer eftersom jag inte uttryckligen angav något annat schemanamn.

Här är den igen, tillsammans med schemanamnet.

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

Resultat:

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

Exempel 2 – Ange ett annat schema

I det här exemplet skickar jag uttryckligen ett schemanamn till funktionen.

SELECT SCHEMA_ID('Dimension') AS Result;

Resultat:

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

Detta säger mig att schemat som heter Dimension har ett ID på 6.

Exempel 3 – Byta databas

Det tidigare exemplet råkade köras i en databas som hade ett schema som heter Dimension. Om jag byter till en annan databas kan jag få ett annat schema-ID eller inget ID alls.

Här är ett exempel på vad jag menar.

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 andra resultatet returnerar NULL eftersom det inte finns något schema som heter Dimension i musikdatabasen.

Exempel 4 – I en WHERE-klausul

Använder SCHEMA_ID() i en WHERE klausul kan vara ett praktiskt sätt att filtrera resultaten efter schema.

I SQL Server använder olika systemvyer ett schema_id kolumn för att lagra schema-ID men inte schemanamnet. Därför måste du känna till schema-ID om du ska filtrera resultaten efter schema. Det är där SCHEMA_ID() kan vara mycket användbart. Det sparar dig från att behöva göra en join på sys.schemas visa bara för att räkna ut schemanamnet.

Här är ett exempel på hur du använder 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. SQL Server 2016 Temporal Table Query Plan Beteende

  2. PostgreSQL 9-installation på Windows:Det går inte att skriva i TEMP-miljösökvägen.

  3. Hur väljer man från två tabeller i MySQL även om inte alla rader i en tabell har korrespondenter i den andra?

  4. The Performance Tuning Maze