0
我在执行查询时遇到了一个奇怪的场景。我对Sql Server执行查询的方式感到惊讶。Sql Server数据类型值问题
引用:
SELECT TOP 10
MR.MerchantContactFirstName +' '+ MR.MerchantContactLastName
AS MerchantName,
AISLTrans.DeviceID,AISLTrans.TransactionID,
AISLTrans.CardNumber,
AISLTrans.TransactionDateTime,
AISLTrans.TransactionStatus,
AISTRNSTYPE.TransactionType
AS TransactionRequestType,AISLTrans.TransactionAmount,
(AISLTrans.BasePointEarn+AISLTrans.BonusPointEarn)
AS 'Point Awarded'
FROM AISLoyaltyTransactions AISLTrans
INNER JOIN MerchantRegistration MR
ON AISLTrans.MerchantID = MR.MerchantID
INNER JOIN AISTransactionTypes AISTRNSTYPE
ON AISLTrans.ProcessingCode = AISTRNSTYPE.ProcessingCode
AND AISLTrans.TransactionType = AISTRNSTYPE.MessageType
WHERE **AISLTrans.TransactionType = 0200**
AND AISLTrans.ProcessingCode = 071000
ORDER BY AISLTrans.TransactionDateTime DESC
在上面的查询字段ISLTrans,TRANSACTIONTYPE工作正常的所有除0200它接受所有整数的值虽然字段类型是VARCHAR的值。
但是,当我给值为0200它引发异常说不能将varchar转换为int。
我在寻找为什么查询仍在执行,虽然我提供的是整数值而不是varchar,并且它正在执行为什么它不接受我提供的所有整数值。
让你的生活更轻松,修复你的代码。 WHERE AISLTrans.TransactionType ='0200'。不要依赖隐式转换。对于性能来说这很糟糕,并且遇到这些类型的随机问题。发生这种情况的原因有时是因为执行计划可能会略有不同,并且可能会改变谓词在内部解决的顺序。您很可能在该表中有一些行,其中TransactionType不是整数。 –