2016-10-26 1 views
1

У меня есть устаревшая база данных, которая беспорядок. Мне нужно исследовать определенную таблицу, которая синхронизируется/обновляется с использованием нескольких источников ... Мне нужно знать, когда и как обновляется таблица.устаревший стол, исследуйте, как он обновляется?

Как получить все источники, используемые для обновления/синхронизации этой таблицы? (Я предполагаю, что в основном это делается с помощью разных заданий с использованием SP).

Есть ли способ поиска во всех SP для '% table name%'?! (Это единственный способ, которым я могу думать, является ли какой-либо другой разумный способ?)

Тогда, мне просто нужно было проверить, какие рабочие места работают те SP, и я мог бы получить более полную картину ...

+0

Возможный дубликат [Поиск текста хранимой процедуры в SQL Server] (http://stackoverflow.com/questions/14704105/search-text-in-stored-procedure-in-sql-server) –

+0

Right нажмите на таблицу => Просмотр зависимостей. Но это может быть недоступно в зависимости от версии вашего SQL Server. – trailmax

+0

. Как вы знаете, что таблицы не обновляются через рабочие нагрузки ad-hoc? – Bridge

ответ

0

Вы может начать с создания сценариев «CREATE» с помощью команды «Задачи/Сгенерировать скрипты ...» ...

... для хранимых процедур и функций, определенных в вашей базе данных.

enter image description here

Тогда вы можете найти сгенерированные файлы SQL, чтобы увидеть, где упоминается ваша таблица интереса.

Это не укажет ничего о приложениях с внутренним SQL, которые обновляют вашу таблицу, но это хороший старт для вашего анализа.

+2

Или вы можете просто искать базу данных с запросом вместо создания сценария для каждого хранимого процесса. sys.sql_modules. :) –

+2

Или вы можете щелкнуть правой кнопкой мыши по имени таблицы в студии SQL Server Management и выбрать «View Dependencies». Он отобразит все виды, хранимые процедуры, триггеры и т. Д., Которые зависят от вашей таблицы. – Sparrow

2

Это будет генерировать список всех проки, которые относятся к объекту «UserInfo»:

> select object_name(object_id) from sys.sql_modules where 
> charindex('userinfo',definition)>0 

Это не будет искать SSIS или BCP пакеты, которые обычно находятся на файловой системе или в базе данных MSDB. Много раз есть задания, которые вызывают пакеты BCP и/или SSIS, которые обновляют данные.

Для проверки только процедуры, которые Вы можете использовать:

> select object_name(sm.object_id) from sys.sql_modules sm inner join 
> sys.objects so on sm.object_id=so.object_id where 
> charindex('userinfo',definition)>0 and type='P' 
+0

Обратите внимание, что это также будет включать UDF, представления и триггеры, а не только SP. Тем не менее, только триггеры из этого списка могут изменять данные, но не напрямую, только если к таблице выполняется специальный запрос. – Bridge

1

Вы могли бы попробовать этот подход тоже (если смотреть на те, где is_updated является 1), но я бы объединить его с другими подходами, как я не нашел, что это быть на 100% надежным.

DECLARE @TwoPartName nvarchar(500) = '[dbo].[YourTable]'; 

SELECT referencing_schema_name, 
     referencing_entity_name, 
     MAX(0 + is_selected) is_selected, 
     MAX(0 + is_updated) is_updated 
FROM sys.dm_sql_referencing_entities (@TwoPartName, 'OBJECT') 
     CROSS APPLY sys.dm_sql_referenced_entities (QUOTENAME(referencing_schema_name) + '.' 
                + QUOTENAME(referencing_entity_name), 'OBJECT') CA2 
WHERE CA2.referenced_id = OBJECT_ID(@TwoPartName) 
GROUP BY referencing_schema_name, 
      referencing_entity_name; 
Смежные вопросы