如何查找所有使用指定用户定义表类型的存储过程?
找出使用指定用户定义表类型的存储过程
可以通过查询SQL Server的系统视图,结合类型、参数和存储过程的关联关系精准定位所有引用目标表类型的存储过程,分两种场景处理:
1. 静态引用(存储过程参数使用该表类型)
执行以下SQL语句,直接找出所有将该表类型作为参数的存储过程:
SELECT SCHEMA_NAME(p.schema_id) AS 存储过程架构, p.name AS 存储过程名称, pr.name AS 参数名称, tt.name AS 表类型名称 FROM sys.procedures p JOIN sys.parameters pr ON p.object_id = pr.object_id JOIN sys.types t ON pr.system_type_id = t.system_type_id AND pr.user_type_id = t.user_type_id JOIN sys.table_types tt ON t.user_type_id = tt.user_type_id WHERE tt.name = 'typeLT_LiefertreueLieferant' ORDER BY 存储过程架构, 存储过程名称;
这个查询通过sys.table_types的user_type_id关联到sys.parameters,再关联到对应的存储过程,确保不会遗漏静态声明的参数引用。
2. 动态SQL中的引用
如果存储过程内部通过动态SQL使用该表类型,上面的查询无法捕获,需要搜索存储过程的定义文本:
SELECT SCHEMA_NAME(p.schema_id) AS 存储过程架构, p.name AS 存储过程名称 FROM sys.procedures p WHERE OBJECT_DEFINITION(p.object_id) LIKE '%typeLT_LiefertreueLieferant%' ORDER BY 存储过程架构, 存储过程名称;
注意事项
- 建议同时执行以上两个查询,覆盖静态参数和动态SQL两种引用场景,确保无遗漏。
- 若数据库包含多个架构,查询结果中的
存储过程架构字段可帮助准确定位存储过程位置。
内容的提问来源于stack exchange,提问作者Habi
相关产品推荐
相关产品推荐

