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不是整數。 –