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