我正在使用 SQL Server 2005。我有两个表,它们使用不同的排序规则。不允许连接具有不同排序规则的表中的列,例如以下 SQL 是不允许的,
select table1column1 + table2column2 from ...
我的问题是,为什么从数据库引擎设计的角度来看,不允许连接来自不同排序规则的两列?我不知道为什么排序规则会影响结果,结果只是连接字符串 - 应该足够简单并且不依赖于排序规则......
提前谢谢,乔治
我正在使用 SQL Server 2005。我有两个表,它们使用不同的排序规则。不允许连接具有不同排序规则的表中的列,例如以下 SQL 是不允许的,
select table1column1 + table2column2 from ...
我的问题是,为什么从数据库引擎设计的角度来看,不允许连接来自不同排序规则的两列?我不知道为什么排序规则会影响结果,结果只是连接字符串 - 应该足够简单并且不依赖于排序规则......
提前谢谢,乔治
可以说Table1Column1
有SQL_Latin1_General_CP1_CI_AS
和Table2Column2
有Latin1_General_CI_AS
。然后你可以这样做:
SELECT Table1Column1 + Table2Column2 COLLATE SQL_Latin1_General_CP1_CI_AS
希望这能解决你的问题:)
好的,
我认为答案很简单,设计一个使用 unicode 的系统比 ascii 字符集要困难得多。你要担心的不仅仅是字母;如果你有阿拉伯语和法语,那么当他们以不同的方向阅读时,你如何做字符串 a + 字符串 b(我认为不兼容假名)?
您必须在排序规则中添加一项新工作-强制-我的理解是强制力应该处理不同排序规则中字符串的兼容性。即它应该允许数据库引擎通过具有这样的规则使得Latin1_CI_AS 在某些情况下应该真正与Latin1_CI_AI 兼容。
如果您有 SQL 99 Spec 的副本;阅读排序规则的强制性,它定义了如何在排序规则之间操作字符串。MS 曾尝试在MSDN上对其进行定义,但我不确定它们与标准相比是否已经走得足够远;也许sql2010会更好……就我对这个主题的阅读而言;它也仍然符合 SQL03 标准——我猜是为了前向可计算性。SQL 99的谷歌书籍条目没有关于强制力的页面,我找不到比 MSDN 解释更好的东西。