2010-05-19 41 views
1

我有2个样本,有效地做同样的事情 - 示例1:SQL中的隐式数据类型转换是否会影响性能?

command.Parameters.Add(ParamFoo, SqlDbType.Int) 
command.Parameters(ParamFoo).Value = fooVal 

示例2:

​​

哪个样品将被推荐?我知道第二个样本正在进行一些转换。不是最好的,不要求转换和第一个样品?

回答

6

当你发布你的代码,是完全不相关的。两种变体的性能都相同,因此您无法在数据库调用的巨大背景下测量客户端内转换的成本。

但是,当barVal是String类型时,存在一个非常大的已知问题。 SqlClient会将参数添加为NVARCHAR类型,并且在SQL表达式中用于与VARCHAR列比较时,SQL type precedence rules将要求将转换为NVARCHAR,而不是要转换为VARCHAR的变量,并且这会更改索引寻求表格扫描,并带来灾难性的后果。

+0

+1用于关于类型优先规则对(N)VARCHAR – Lucero 2010-05-19 22:11:27

+0

影响的警告和解释+1:欣赏警告。正式指出。 – IAbstract 2010-05-19 23:26:35

+0

我想,如果我正确地阅读这个,对于'String'数据类型,我应该选择两行样本(#1)。 – IAbstract 2010-05-20 00:41:43

相关问题