3

我正在使用 SQL Server 2005。我有两个表,它们使用不同的排序规则。不允许连接具有不同排序规则的表中的列,例如以下 SQL 是不允许的,

select table1column1 + table2column2 from ...

我的问题是,为什么从数据库引擎设计的角度来看,不允许连接来自不同排序规则的两列?我不知道为什么排序规则会影响结果,结果只是连接字符串 - 应该足够简单并且不依赖于排序规则......

提前谢谢,乔治

4

2 回答 2

4

可以说Table1Column1SQL_Latin1_General_CP1_CI_ASTable2Column2Latin1_General_CI_AS。然后你可以这样做:

SELECT Table1Column1 + Table2Column2 COLLATE SQL_Latin1_General_CP1_CI_AS

希望这能解决你的问题:)

于 2012-04-20T06:08:23.920 回答
1

好的,

我认为答案很简单,设计一个使用 unicode 的系统比 ascii 字符集要困难得多。你要担心的不仅仅是字母;如果你有阿拉伯语和法语,那么当他们以不同的方向阅读时,你如何做字符串 a + 字符串 b(我认为不兼容假名)?

您必须在排序规则中添加一项新工作-强制-我的理解是强制力应该处理不同排序规则中字符串的兼容性。即它应该允许数据库引擎通过具有这样的规则使得Latin1_CI_AS 在某些情况下应该真正与Latin1_CI_AI 兼容。

如果您有 SQL 99 Spec 的副本;阅读排序规则的强制性,它定义了如何在排序规则之间操作字符串。MS 曾尝试在MSDN上对其进行定义,但我不确定它们与标准相比是否已经走得足够远;也许sql2010会更好……就我对这个主题的阅读而言;它也仍然符合 SQL03 标准——我猜是为了前向可计算性。SQL 99的谷歌书籍条目没有关于强制力的页面,我找不到比 MSDN 解释更好的东西。

于 2009-05-10T14:02:13.970 回答