Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Como SCHEMA_ID() funciona no SQL Server


No SQL Server, você pode usar o SCHEMA_ID() função para retornar o ID de um determinado esquema. Mais especificamente, essa função retorna o ID do esquema associado a um nome de esquema.

É como SCHEMA_NAME() exceto que ele retorna o ID do esquema em vez do nome (e aceita o parâmetro name em vez do ID).

Se você não passar um nome de esquema para a função, ela retornará o ID do esquema padrão do chamador.


Exemplo 1 - Esquema padrão de retorno


Aqui está um exemplo que retorna o ID do esquema padrão do chamador.
SELECT SCHEMA_ID() AS Result;

Resultado:
+----------+
| Result   |
|----------|
| 1        |
+----------+

Isso retorna o ID do esquema padrão do chamador porque não especifiquei explicitamente nenhum outro nome de esquema.

Aqui está novamente, junto com o nome do esquema.
SELECT 
  SCHEMA_ID() AS [Schema ID],
  SCHEMA_NAME() AS [Schema Name];

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

Exemplo 2 – Especifique um esquema diferente


Neste exemplo, passo explicitamente um nome de esquema para a função.
SELECT SCHEMA_ID('Dimension') AS Result;

Resultado:
+----------+
| Result   |
|----------|
| 6        |
+----------+

Isso me diz que o esquema chamado Dimension tem um ID de 6.

Exemplo 3 – Trocando Bancos de Dados


O exemplo anterior foi executado em um banco de dados que tinha um esquema chamado Dimension. Se eu mudar para um banco de dados diferente, posso obter um ID de esquema diferente ou nenhum ID.

Aqui está um exemplo do que quero dizer.
USE WideWorldImportersDW;
SELECT SCHEMA_ID('Dimension') AS Result;

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

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

O segundo resultado retorna NULL porque não há esquema chamado Dimension no banco de dados Music.

Exemplo 4 - Em uma cláusula WHERE


Usando SCHEMA_ID() em um WHERE A cláusula pode ser uma maneira prática de filtrar os resultados por esquema.

No SQL Server, várias exibições do sistema usam um schema_id coluna para armazenar o ID do esquema, mas não o nome do esquema. Portanto, você precisa saber o ID do esquema se quiser filtrar os resultados por esquema. É onde SCHEMA_ID() pode ser muito útil. Isso evita que você precise fazer uma junção no sys.schemas view apenas para descobrir o nome do esquema.

Aqui está um exemplo de uso de SCHEMA_ID() em um WHERE cláusula.
USE WideWorldImportersDW;
SELECT 
  name,
  type_desc 
FROM sys.objects
WHERE schema_id = SCHEMA_ID('Dimension');

Resultado:
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)