2017-04-10 16 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

回答

相关问题