gpt4 book ai didi

sql - T-SQL : Show stored procedures related to tables, 循环

转载 作者:行者123 更新时间:2023-12-04 21:04:00 28 4
gpt4 key购买 nike

我正在使用以下 t-sql 代码:

USE [my_database]
SELECT DISTINCT so.name
FROM syscomments sc
INNER JOIN sysobjects so ON sc.id=so.id
WHERE sc.TEXT LIKE '%table_name%'

为了显示所有使用表 table_name 的存储过程。

我想为我的数据库中的所有表做这项工作。

如何执行此任务并组织输出?

最佳答案

这对表和存储过程都使用信息架构。您可以更改或去掉 ROUTINE_TYPE 条件以添加函数,您可以更改表类型以返回 View 。

此答案通过检查存储过程所依赖的表来产生结果。我认为这将是一个更准确的结果,然后检查名称是否在查询文本中。如果该过程引用了注释部分中的表,则此结果将不会在第一个查询中返回,但会在第二个和其他给出的答案中返回。

SELECT t.TABLE_NAME, s.ROUTINE_NAME
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s ON
s.ROUTINE_NAME IN (SELECT referencing_entity_name
FROM sys.dm_sql_referencing_entities(TABLE_SCHEMA + '.' + TABLE_NAME, 'OBJECT'))
AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'

edit:下面是如何在没有函数的情况下获取依赖项。 (我最喜欢这种方法)

SELECT DISTINCT t.name [TableName], p.name [ProcedureName]
FROM sys.objects t
LEFT JOIN sys.sql_dependencies d ON
d.referenced_major_id = t.object_id
LEFT JOIN sys.objects p ON
p.object_id = d.object_id
AND p.type = 'p'
WHERE t.type = 'u'

如果您的具体用途是查找与表名匹配的任何字符串,则以下方法将起作用:

SELECT t.TABLE_NAME, s.ROUTINE_NAME 
FROM INFORMATION_SCHEMA.TABLES t
INNER JOIN INFORMATION_SCHEMA.ROUTINES s
ON CHARINDEX(t.TABLE_NAME, s.ROUTINE_DEFINITION) > 0
AND s.ROUTINE_TYPE = 'PROCEDURE'
WHERE t.TABLE_TYPE = 'BASE TABLE'

关于sql - T-SQL : Show stored procedures related to tables, 循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17407275/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com