You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何查找所有使用指定用户定义表类型的存储过程?

找出使用指定用户定义表类型的存储过程

可以通过查询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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 06:15:59