Sql server 删除SQL Server中的隐式转换

Sql server 删除SQL Server中的隐式转换,sql-server,casting,implicit-conversion,Sql Server,Casting,Implicit Conversion,我试图从数据库中消除隐式转换 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.Updated

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

        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
我在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
这是简化的模式

        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
此链接中的完整查询和架构

        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

        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
附件是执行计划中出现提示时的错误消息

        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

警告是关于显式转换,而不是隐式转换。您显示的工具提示没有提到
CONVERT\u IMPLICIT

        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
CAST(ba.UpdatedById为INT)
在计划中显示为
CONVERT(INT,ba.UpdatedById,0)
并警告您这一点(它阻止对ba.UpdatedById进行索引搜索)

        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

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

您需要发布表的架构以及收到的确切错误消息。若要使您的问题更易于访问,链接到上的一个示例,其中包含一些导致失败的数据。我们还可以查看BookedItemsAudit的架构吗_tbl@tass感谢您提供的SQLFiddle链接。我以前从未使用过那个网站,看起来非常有用和有用intuitive@robinDay嗨,罗宾,我想我应该把这些东西贴到SQL fiddle上,以防我漏掉了什么@martin smith,好的,谢谢martin,第二轮时,我跳了枪,没有正确阅读错误。。。没想到显式转换后仍会产生警告。。。。改变场地有点棘手@DamagedGoods-警告是提醒您显式的
强制转换
无法组织,并阻止在
ba.UpdatedById
上进行索引搜索。顺便问一下,你们都投了反对票并接受了这个答案吗?真诚的道歉!我本想对这个答案投赞成票,但现在它被卡住了。。我会发一封电子邮件给管理员,或者如果你对答案稍加修改,我想我可以更改答案vote@DamagedGoods-啊,谢谢。我觉得这很奇怪!我现在编辑了答案。
        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