4

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

我在下面的 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小提琴

附件是提示出现在执行计划中时的错误信息

转换为 INT 后的隐式转换

4

1 回答 1

6

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

CAST(ba.UpdatedById AS INT)显示在计划中CONVERT(int,ba.UpdatedById ,0)并警告您(它会阻止在 ba.UpdatedById 上进行索引搜索)。

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

于 2013-03-06T12:55:29.697 回答