![]() |
1
2
对于性能而言,问题仅在于数据库是否可以重用现有的计划。 简单地说,您可以将其视为数据库以sql语句作为键缓存查询计划。一旦您更改了sql语句,它将不在缓存中,并且必须生成新的计划。 所以生成动态语句
在缓存中的机会比
您还应该将模式名添加到查询中的tablenames(例如dbo.table)。否则,如果计划由不同的登录名执行,则它将不会被重用。 |
![]() |
2
0
只要不需要动态地进行其他连接来检查可能重要的参数的值,并且唯一的动态部分是WHERE子句,那么这也可以是一个包含所有可能参数的静态查询。所以你有以下情况: 如果要检查所有可能的值(负/零/零/正/空字符串/等),则需要使用辅助参数,如@ SeimiFiFiTangPyPARAM1,以及@ PARAM1的原始值。
这是我能想象到的最普遍的条款。
基本上它会验证
另一方面,如果
|
![]() |
3
0
动态查询本身并没有什么问题。但你打算这样做是很可怕的。这意味着您的参数将是@Filter的一部分,而@Filter只是请求SQL注入攻击。这也意味着您的查询计划不太可能被重用,这可能会由于过度的查询重新编译而导致高CPU和低吞吐量。 您需要确保生成的动态SQL是正确参数化的。您还需要确保在使用ADO.NET代码(或可能使用的任何数据访问技术)访问它时,使用SqlParameter(或等效的)对象。 |
![]() |
Community wiki · SQL语法新手 1 年前 |
![]() |
KateMak · 是否将多行中的多列与唯一id组合? 1 年前 |
![]() |
Karuna · SQL中列内的筛选器[重复] 1 年前 |
![]() |
Irvan Affandy · 为另一个选择选择声明的键 1 年前 |
![]() |
Community wiki · 这个MySQL语句出了什么问题? 1 年前 |
![]() |
Community wiki · 优化从同一表中提取的多列的查询 1 年前 |