Estou trabalhando com um banco de dados que possui muitas exibições entre bancos de dados. Enquanto INFORMAÇÕES_SCHEMA.VIEWS lista todas essas exibições, INFORMAÇÕES_SCHEMA.VIEW_TABLE_USAGE e INFORMAÇÕES_SCHEMA.VIEW_COLUMN_USAGE não.
Todas as exibições em questão estão neste formato:
CREATE VIEW [dbo].[Invoice]
AS SELECT * FROM [otherdb].[dbo].[Invoice]
A consulta a seguir retorna 0 linhas:
SELECT
VIEW_CATALOG
,VIEW_SCHEMA
,VIEW_NAME
FROM INFORMATION_SCHEMA.VIEW_TABLE_USAGE
WHERE TABLE_CATALOG <> VIEW_CATALOG
Deixando a adequação de SELECT * para outra discussão, por que as referências de banco de dados externas não estão nas exibições INFORMATION_SCHEMA e há alguma maneira de obtê-las?
Sim, pare de usar
INFORMATION_SCHEMA
por vários motivos , incluindo um que não mencionei naquele post (ainda), que é o fato de eles não lidarem com dependências entre bancos de dados.Em vez disso, use as exibições de catálogo e as funções de gerenciamento dinâmico.
Para obter apenas as visualizações, você pode usar
sys.sql_expression_dependencies
:Para obter os nomes das colunas também, você pode usar
sys.dm_sql_referenced_entities
: