首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >我们认为什么是动态sql语句?

我们认为什么是动态sql语句?
EN

Stack Overflow用户
提问于 2009-12-11 04:22:54
回答 9查看 617关注 0票数 3

a)我们认为什么是动态sql语句?

是否有任何sql语句可以动态地向SQL字符串中添加一个子句,甚至只添加一个子句的一部分?

B)那么,对动态提供的值使用占位符的参数化字符串不也被视为动态sql语句吗?

谢谢

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2009-12-11 04:27:39

动态SQL语句通常是指使用字符串连接构造的语句。

代码语言:javascript
复制
"SELECT name FROM names WHERE id=" + this.id;
"SELECT name FROM names WHERE id=" + this.id + " AND age=" this.age;

参数化查询也是动态的,但不是在构造方面。您只能更改参数,但不能更改语句的结构,即添加WHERE子句。

参数化查询通常位于数据库级别,因此数据库可以缓存查询的执行计划并反复使用它。在第一种情况下不太可能,因为where子句的文本或顺序的简单更改可能会导致数据库无法识别以前缓存的执行计划并重新开始。

第一个构造也容易受到SQL注入的攻击,因为很难验证尝试注入恶意SQL的输入值。

票数 3
EN

Stack Overflow用户

发布于 2009-12-11 04:26:30

动态SQL语句是在执行时生成的语句。重点在于语句。因此,如果您只是在执行时提供一个值,那么它就不是动态SQL。

票数 6
EN

Stack Overflow用户

发布于 2009-12-11 04:27:25

当然,任何涉及EXEC (@sql)EXEC sp_ExecuteSQL @sql, ... (即数据库本身的动态)都是合格的,但我猜您可能会认为,在运行时生成的任何SQL (而不是在构建/安装时修复的)都是合格的。

因此,是的,您可能会认为运行时生成的、但正确参数化的查询是“动态的”(例如,LINQ- to -SQL生成的查询),但老实说,只要它不会使您受到注入攻击,我并不关心名称;-p

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1883747

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档