在MS SQL Server中,有什么区别:
select * from Person where Id='7'
Run Code Online (Sandbox Code Playgroud)
和
select * from Person where Id=7
Run Code Online (Sandbox Code Playgroud)
这两个查询返回相同的结果。
该标识类型是INT。
我们不应该将int与string进行比较吗?
什么时候应该使用其中之一?
始终将相同的数据类型进行比较,并避免隐式转换。
SELECT 'Not OK!' WHERE 'text' = 1
-- Result: Conversion failed when converting the varchar value 'text' to data type int.
Run Code Online (Sandbox Code Playgroud)
如数据类型优先级所述,当数据类型不匹配时,SQL引擎(在大多数情况下)将尝试将最复杂的类型转换为最简单的类型,因此比较会更快。在这种情况下(VARCHARvs. INT),它将始终将字符串类型转换为int。
另外,在对具有通过联接和其他操作进行隐式转换的SQL进行编码时,最有可能生成与通过显式转换生成的执行计划不同的执行计划。
如果必须比较不同的类型,请记住要显式地强制转换它们,这不仅是因为前面提到的原因,而且还告诉下一个开发人员数据类型不同的列或表达式。
SELECT 'OK!' WHERE 'text' = CONVERT(VARCHAR(10), 1)
Run Code Online (Sandbox Code Playgroud)
对于某些数据类型,如果您保留隐式转换,则可能会发现不需要的行为。
DECLARE @BitValue1 BIT = NULL
DECLARE @BitValue2 BIT = 1
SELECT
'Oops!'
WHERE
ISNULL(@BitValue1, -999) = ISNULL(@BitValue2, -999)
-- Result: Oops! (-999 is being converted to bit, which is 1)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
456 次 |
| 最近记录: |