遗留表,调查它如何更新?

时间:2016-10-26 16:04:48

标签: sql-server legacy-code

我有一个混乱的遗留数据库。我需要研究一个使用多个源同步/更新的特定表...我需要知道表的更新时间和方式。

如何检索用于更新/同步此表的所有来源? (我猜这主要是通过使用SP的不同工作完成的。)

有没有办法在所有SP中搜索'%table name%'? (这是我能想到的唯一方式,还有其他合理的方法吗?)

然后,我只需要检查哪些作业正在运行那些SP,我可以得到更好的图片......

3 个答案:

答案 0 :(得分:2)

这将生成引用对象'UserInfo'的所有过程的列表:

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

这不会搜索通常位于文件系统或MSDB数据库中的SSIS或BCP包。很多时候,有些作业会调用更新数据的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'

答案 1 :(得分:1)

您也可以尝试这种方法(寻找is_updated1的方法),但我会将其与其他方法结合使用,因为我没有发现这是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;

答案 2 :(得分:0)

您可以通过“Tasks / Generate Scripts ...”命令生成“CREATE”脚本开始... enter image description here

...用于数据库中定义的存储过程和函数。

enter image description here

然后,您可以搜索生成的SQL文件,以查看引用感兴趣的表的位置。

这并不表示有关内部SQL更新表的应用程序的任何内容,但它是分析的良好开端。