Я работаю с SQL Серверным ядром базы данных, в базе данных которого содержится примерно 2000 просмотров. Большинство этих представлений используют оператор OpenQuery для выбора данных из базы данных Oracle через связанный сервер.
У меня есть новое требование для определения зависимостей между SQL серверными представлениями и Oracle Объекты, указанные в операторах OpenQuery. Это не будет разовым требованием, поэтому мне нужно будет время от времени обновлять sh это. Объекты внутри Oracle часто меняются, и новые представления регулярно добавляются или модифицируются на сервере SQL.
Некоторые из представлений (около 0,5% из них) структурированы, как показано ниже (без OpenQuery):
CREATE VIEW [dbo].[SampleViewType1] AS
SELECT ColX,
ColY
FROM OracleLinkedServerName..OracleSchemaName.SampleOracleTable1
Для этих представлений я наткнулся на полезный запрос, который может выбирать представления и Oracle объекты, на которые он ссылается.
SELECT
Distinct
referenced_Server_name As LinkedServerName,
referenced_schema_name AS LinkedServerSchema,
referenced_database_name AS LinkedServerDB,
referenced_entity_name As LinkedServerTable,
OBJECT_NAME (referencing_id) AS ObjectUsingLinkedServer
FROM sys.sql_expression_dependencies
WHERE referenced_database_name IS NOT NULL
And referenced_Server_name = 'OracleLinkedServerName'
Он может дать мне результаты, как показано ниже :
sys.sql_expression_dependencies result
Однако большинство представлений структурированы в соответствии с приведенным ниже примером и используют OpenQuery. К сожалению, sys.sql_expression_dependencies
не принимает эти типы ссылок.
CREATE VIEW [dbo].[SampleViewType2] As
SELECT
ColA,
ColB
FROM OPENQUERY
(
OracleLinkedServerName,
'SELECT *
FROM SampleOracleTable2
WHERE TestDate BETWEEN TRUNC(SYSDATE, ''month'') AND TRUNC(SYSDATE)'
);
Есть ли у кого-нибудь какие-либо предложения о том, как я могу получить эту информацию? На данный момент я не уверен, возможно ли это. Я открыт для использования других технологий за пределами SQL, таких как C#, VB и т.д. c.