2017-04-10 17 views
-1

我知道,如果您正在比較兩種不同類型,sql必須將具有最低類型優先級的任何一方轉換爲與其他類型匹配。例如,在這種情況下,如果左側是表中的列,則varchar = nvarchar,則在進行比較之前,必須將整個集合轉換爲nvarchar。SQL Server爲什麼在比較位和文字時沒有隱式轉換?

如果我們遵循相同的模式,有「where Bit_Column = 1」,SQL將不得不首先將位列轉換爲整數的權利?但是當我查看執行計劃時,SQL將文字轉換爲位,而不是相反。

這是怎麼發生的?

感謝

+1

我真的不確定我是否理解這個問題,或者你爲什麼會認爲這是另一回事。將文字1轉換爲位(或甚至「是」或「否」轉換爲位)是直接的和預期的。在你的字符串的情況下,它被轉換爲nvarchar,因爲轉換另一種方式可能導致數據丟失,所以沒有特定的轉換就不允許。 – pmbAustin

+0

請向我們展示在執行計劃中您看到了文字轉換爲位的位置。另外,文字不是數據類型,整數和位都是。 – RBarryYoung

+0

我可以想象查詢優化器只是將int轉換爲一點而不是相反,因爲它效率更高。爲什麼要將「Bit_Column」中的每一位都轉換爲int,只要將單個整數1轉換爲一位? – mallan1121

回答

相關問題