删除SQL Server中的隐式转换

Chr*_*ood 3 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
Run Code Online (Sandbox Code Playgroud)

这是减少的架构

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
Run Code Online (Sandbox Code Playgroud)

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

SQL小提琴

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

转换为INT后的隐式转换

Mar*_*ith 5

警告是关于您的显式转换而不是隐式转换.你展示的工具提示没有提到CONVERT_IMPLICIT

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

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