如何识别包含动态sql的存储过程

时间:2015-02-02 11:04:22

标签: sql sql-server-2008 dynamic-sql

识别包含动态SQL的存储过程的最佳方法是什么?我创建了这个SQL语句:

SELECT * 
FROM sys.sql_modules  
WHERE 
    REPLACE(definition,' ','') LIKE '%exec(%' 
    OR definition LIKE '%sp_executesql%' 
    OR REPLACE(definition,' ','') LIKE '%execute(%'

会找到所有实例吗?

1 个答案:

答案 0 :(得分:1)

我无法向您提供确切的示例,但我可能会指出您正确的方向。 Microsoft的类负责解析和生成SQL批处理。您可以使用这些类来解析存储过程的内容,并查找所有可能的真实动态sql调用。

此处提供更多信息:https://msdn.microsoft.com/en-us/library/microsoft.sqlserver.transactsql.scriptdom(v=sql.110).aspx

我不确定,这是否也包括SQL 2008。对不起。

以下是如何使用这些类删除SQL脚本中的注释的示例:

http://michaeljswart.com/2014/04/removing-comments-from-sql/

修改

解析SQL语句还有较旧的,也是Microsoft的解决方案。没有那么强大,但SQL 2008兼容。请检查这是否符合您的需求:

https://technet.microsoft.com/en-us/library/microsoft.sqlserver.management.sqlparser.parser(v=sql.105).aspx