a)我们认为什么是动态sql语句?
是否有任何sql语句可以动态地向SQL字符串中添加一个子句,甚至只添加一个子句的一部分?
B)那么,对动态提供的值使用占位符的参数化字符串不也被视为动态sql语句吗?
谢谢
发布于 2009-12-11 04:27:39
动态SQL语句通常是指使用字符串连接构造的语句。
"SELECT name FROM names WHERE id=" + this.id;
"SELECT name FROM names WHERE id=" + this.id + " AND age=" this.age;参数化查询也是动态的,但不是在构造方面。您只能更改参数,但不能更改语句的结构,即添加WHERE子句。
参数化查询通常位于数据库级别,因此数据库可以缓存查询的执行计划并反复使用它。在第一种情况下不太可能,因为where子句的文本或顺序的简单更改可能会导致数据库无法识别以前缓存的执行计划并重新开始。
第一个构造也容易受到SQL注入的攻击,因为很难验证尝试注入恶意SQL的输入值。
发布于 2009-12-11 04:26:30
动态SQL语句是在执行时生成的语句。重点在于语句。因此,如果您只是在执行时提供一个值,那么它就不是动态SQL。
发布于 2009-12-11 04:27:25
当然,任何涉及EXEC (@sql)或EXEC sp_ExecuteSQL @sql, ... (即数据库本身的动态)都是合格的,但我猜您可能会认为,在运行时生成的任何SQL (而不是在构建/安装时修复的)都是合格的。
因此,是的,您可能会认为运行时生成的、但正确参数化的查询是“动态的”(例如,LINQ- to -SQL生成的查询),但老实说,只要它不会使您受到注入攻击,我并不关心名称;-p
https://stackoverflow.com/questions/1883747
复制相似问题