为什么要在存储过程中避免使用动态 SQL?

Ric*_*nit 15 sql-server stored-procedures dynamic-sql

我听说它说您不想使用动态 SQL。你能给我一些具体的或现实生活中的例子吗?

就个人而言,我在我的数据库中多次使用它进行编码。我认为这是可以的,因为它的灵活性。

我的猜测是关于 SQL 注入或性能。还要别的吗?

Wor*_*DBA 9

如果必须的话,使用动态 SQL 并没有错。事实上,在某些情况下,它是您唯一的选择。更多的是建议不要使用它,因为如果您的输入没有经过清理,它可能会导致 SQL 注入,并且是的,在经常被调用的模块中使用动态 SQL 可能会损害其性能。

我不认为有一个具体的例子本身,但我会这样说:首先尝试在使用常规查询和语句之后实现你的目标 - 只有当你用尽所有其他途径时才动态地执行它。请记住,执行动态 SQL 字符串是在调用它的模块的单独用户会话中完成的 - 因此您可能会遇到您不期望的权限问题。

如果您担心性能;测试一下。如果您担心安全;验证您的输入。没有对错之分 - 只是您根据当时可用的信息和工具做出最佳判断。


Fab*_*ujo 6

动态 SQL 是一种工具。作为一种工具,它有一些应用——例如,对于行政工作来说,它是一种祝福。

对应用程序使用的 SP 不太好,特别是如果您没有管理生成代码的参数化(最新版本的 SQL Server 减少了问题,但仍然有效)。

我不会在这里详细介绍,所以我会推荐一篇关于动态 SQL 问题的优秀文章:MVP Erland Sommarskog 的The Curse and Blessings of Dynamic SQL