识别包含动态SQL的存储过程的最佳方法是什么?我创建了这个SQL语句:
SELECT *
FROM sys.sql_modules
WHERE
REPLACE(definition,' ','') LIKE '%exec(%'
OR definition LIKE '%sp_executesql%'
OR REPLACE(definition,' ','') LIKE '%execute(%'
会找到所有实例吗?
答案 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兼容。请检查这是否符合您的需求: