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)