删除SQL Server中的隐式转换

时间:2013-03-06 11:12:04

标签: sql-server casting implicit-conversion

我试图消除数据库中的隐式转换。

我在UpdatedByID字段上添加了下面的CAST语句,因为这是一个Char(10),它正在加入FROM语句中的INT。但我仍然得到隐含的转换。我一定错过了一些明显的东西?

        SELECT DISTINCT ba.BookingID INTO #temp1
        FROM BookedItemsAudit_tbl bia  
        INNER JOIN BookingAudit_tbl ba ON bia.BookingAuditID = ba.BookingAuditID    
        INNER JOIN User_tbl u ON  u.UserId  = CAST(ba.UpdatedById AS INT)
        WHERE bia.BookedItemTypeId IN (1, 58, 60)   
        AND u.UserId = 5

这是减少架构

BOOKINGAUDIT_TBL
Column_name     Type        Length
BookingAuditID  int         4
BookingID       int         4
UpdatedByID     CHAR        10
UpdatedBy       varchar     50
UpdatedDate     datetime    8
TotalMargin     money       8
BookingStatusId int         4

 USER_TBL
 Column_name    Type        Length
 UserId         int         4
 FullName       varchar     100
 UserName       varchar     20

此链接中的完整查询和架构

SQL fiddle

当提示出现在执行计划

中时,

附加是错误消息

Implicit conversion after casting to INT

1 个答案:

答案 0 :(得分:5)

警告是关于显式转换,而不是隐式转换。您显示的工具提示并未提及CONVERT_IMPLICIT

CAST(ba.UpdatedById AS INT)在计划中显示为CONVERT(int,ba.UpdatedById ,0)并且它警告您(它阻止了对ba.UpdatedById的索引搜索)。

要停止看到此警告,您需要修复架构,以便加入相同数据类型的列。