2013-03-06 47 views
3

我試圖從數據庫中消除隱式轉換。刪除SQL Server中的隱式轉換

我在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

+0

您需要發佈表格的模式以及您正在收到的確切錯誤消息。 – 2013-03-06 11:13:51

+0

爲了使您的問題更易於訪問,請鏈接到http://sqlfiddle.com/上的一個示例,其中包含導致失敗的一些數據。 – Tass 2013-03-06 11:16:01

+0

我們是否還可以看到BookedItemsAudit_tbl – 2013-03-06 11:28:17

回答

4

該警告是關於您的明確轉換不是隱含轉換。告訴你的提示並沒有提及CONVERT_IMPLICIT

CAST(ba.UpdatedById AS INT)的計劃,CONVERT(int,ba.UpdatedById ,0)顯示出來,它是警告你說(它可以防止一個索引查找上ba.UpdatedById)。

要停止看到此警告,您需要修復您的模式,以便您加入相同數據類型的列。

+0

@ martin smith,好的,謝謝馬丁,跳過槍,沒有第二次正確讀取錯誤......沒想到它在顯式轉換後仍然會產生警告......改變字段有點棘手! – 2013-03-06 17:05:55

+1

@DamagedGoods - 警告提示您明確的CAST不可糾正,並防止在ba.UpdatedById上進行索引查找。順便說一下,你們都已經倒下了並接受了這個答案? – 2013-03-06 17:07:34

+0

真誠的道歉!我的意思是upvote這個答案,但現在其鎖定..我會發送一封電子郵件給管理員,或者如果你編輯答案很輕微,我想我可以改變投票 – 2013-03-07 08:16:55