SQL Server中隐式转换和显式转换的区别

Vig*_*r A 1 sql sql-server implicit-conversion

你能告诉我SQL Server中的隐式转换和显式转换之间的区别吗?

我用谷歌搜索了这个,但我无法得到它.

Mar*_*ith 10

在查询中明确使用CONVERTCAST关键字时,会发生显式转换.

当表达式中有不同的数据类型时,会出现隐式转换,SQL Server会根据数据类型优先级的规则自动转换它们.

例如,nvarchar的优先级高于varchar

CREATE TABLE Demo
(
X varchar(50) PRIMARY KEY
)

/*Explicit*/
SELECT *
FROM Demo 
WHERE CAST(X AS NVARCHAR(50)) = N'Foo'

/*Implicit*/
SELECT *
FROM Demo 
WHERE X = N'Foo' /*<-- The N prefix means nvarchar*/
Run Code Online (Sandbox Code Playgroud)

第二个执行计划显示了一个谓词

CONVERT_IMPLICIT(nvarchar(50),[D].[dbo].[Demo].[X],0)=[@1]
Run Code Online (Sandbox Code Playgroud)

在这种情况下,显式和隐式转换都会阻止索引搜索.