![]() |
1
7
你的一些问题的答案可以在这里找到 The Curse and Blessings of Dynamic SQL 有时必须使用动态SQL,因为它的性能更好 |
![]() |
2
2
这取决于您所说的动态SQL的含义。在直接替换到SQL字符串中的参数值处生成的查询是危险的,应该避免这种情况,除非很少出现没有其他选项的情况。 使用平台支持的适当参数化查询机制的动态SQL可能非常强大。 |
![]() |
3
2
在评估动态SQL的使用时,有几个注意事项:
记住,SQL是代码,RDBMS是另一个API。它不是特别的,或者至少不是特别的;像处理任何其他代码和API一样处理它。尤其是,不要直接针对API编写代码:模块化代码并编写一些助手方法,以使其更容易和可重用。 |
![]() |
4
1
“动态SQL”的成本因DBMS而异。
我相信——尽管DB2专家可能会反驳我——DB2的CLI(ODBC,又名CCC)和JCC(JDBC)系统都将SQL作为动态SQL。 我不知道Oracle、Sybase和MS SQL Server做了什么——我怀疑它们更接近于IDS采用的行,而不是DB2采用的行。对于MySQL和PostgreSQL,如果它们的行为不像DB2那样像ID,我会感到惊讶。 因此,对于ID,使用动态SQL没有特别的开销;在服务器级别,您的SQL仍然是动态的。其他DBMS可能有其他因素在起作用。 所有服务器的一个问题是“如何从通过线路发送的SQL中识别预编译的查询”。使用DB2,预编译器识别所使用的包,应用程序和服务器之间的通信协议识别该包。我的理解是,DB2客户机(如ODBC和JDBC)不使用预编译的包,因此我认为它们一直有效地执行动态SQL。 注意使用动态SQL的SQL注入! |
![]() |
5
0
我以前的商店决不允许对数据库(SQL Server)执行此类操作。 作为惯例,这是被禁止的,并且数据库被锁定以防止这种情况发生。 所有工作都通过对象(SP等)。 这是一个正确的方法,总是这样,imho。 |
![]() |
6
0
有些边缘情况下,动态SQL比其他方案更容易、更快。只要您将它们保持在很小的范围内,并且它们是动态生成的、准备好的参数化SQL,我就不会发现它们有什么大问题。 |
![]() |
7
0
动态SQL在生产代码中也占有一席之地。执行带有安全漏洞的任意代码不会。 一般来说,如果没有充分的理由使用动态SQL,我将避免使用它。动态SQL在运行之前不会被检查,所以显然您有更大的测试负担。但是,在处理管理任务、静态代码生成、适应不断变化的系统而不需要基于查询元数据的过度维护、使用DRY避免冗余等方面,使用它的时机很多。 |
![]() |
8
0
我们的系统中有很多我认为是动态SQL的东西,主要是因为我们有很多动态创建的 物体 (主要是表、索引和视图)。其中很大一部分是遗留的;像2K5中的分区表之类的东西在我们的一些用例中有些帮助。但是正如前面提到的,您需要为它做一个很好的案例;在运行中,procs内部的SQL通常有一个更好的(静态)解决方案。 |
![]() |
Community wiki · SQL语法新手 1 年前 |
|
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |