查找引用特定列的存储过程

djb*_*ois 5 sql sql-server stored-procedures

我发现这段代码可以找到任何引用单个特定列的存储过程。现在我想创建一个查找引用多个特定列的存储过程的程序。

SELECT DISTINCT Name 
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%tbl_name%'
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%CreatedDate%';
Run Code Online (Sandbox Code Playgroud)

如果可能的话,我有时可以指定列可能来自哪个表(有时是多个表)?

Nic*_*del 1

当然只需扩展您的 SQL 以包含其他 AND 子句,例如:

SELECT DISTINCT Name 
FROM sys.procedures
WHERE OBJECT_DEFINITION(OBJECT_ID) LIKE '%tbl_name%'
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%CreatedDate%'
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%Other_tbl_name%'
AND OBJECT_DEFINITION(OBJECT_ID) LIKE '%Other_CreatedDate%';
Run Code Online (Sandbox Code Playgroud)

这对你有用吗?

另外,除非您的列名称在每个表中都是唯一的,否则我希望您可能会得到误报,因此例如 tbl_name 可能会被引用为 CreatedDate 列,但这并不意味着对 CreatedDate 的列引用来自 tbl_name.CreatedDate。

另外,我认为这不会捕获动态 SQL 中的任何引用,因为其中的引用只是文本,不能绑定到系统对象。