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