为什么我执行语句报奇怪的错误~~~~~~~~~~~~~~~~~~~~~~~

god_sun 2007-02-13 05:10:45
Cannot resolve the collation conflict between "SQL_Latin1_General_CP850_BIN" and "SQL_Latin1_General_CP1_CI_AS" in the equal to operation.


------------------------------------------------------------------------
SQL_Latin1_General_CP850_BIN,SQL_Latin1_General_CP1_CI_AS是什么东西啊~?
...全文
235 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangdehao 2007-02-14
  • 打赏
  • 举报
回复
排序规则不同,在你的sql中指定排序规则
gc_ding 2007-02-14
  • 打赏
  • 举报
回复
那是因为你的表达式所引用的两个操作数表达式的排序规则不同。

参考:

如果复杂表达式所引用的两个操作数表达式的排序规则不同,则该复杂表达式最终结果的排序规则标志基于下列规则:

显式优先于隐性。隐性优先于强制默认。换言之,
显式 > 隐性 > 强制默认

组合两个已指派给不同排序规则的显式表达式将生成错误。
显式 X + 显式 Y = 错误

组合两个具有不同排序规则的隐性表达式将产生无排序规则。
隐性 X + 隐性 Y = 无排序规则

将无排序规则的表达式与任何标志的表达式组合,除了显式排序规则外(参见下一项),都产生无排序规则标志的结果。
无排序规则 + 任何标志 = 无排序规则

将无排序规则的表达式与显式排序规则的表达式组合将产生具有显式标志的表达式。
无排序规则 + 显式 X = 显式

下面的示例说明上述规则。

USE tempdb
GO

CREATE TABLE TestTab (
id int,
GreekCol nvarchar(10) collate greek_ci_as,
LatinCol nvarchar(10) collate latin1_general_cs_as
)
INSERT TestTab VALUES (1, N'A', N'a')
GO

下面查询中的谓词具有排序规则冲突,因此产生错误:

SELECT *
FROM TestTab
WHERE GreekCol = LatinCol

下面是结果集。

Msg 446, Level 16, State 9, Server CTSSERV, Line 1
Cannot resolve collation conflict for equal to operation.

下面查询中的谓词在排序规则 greek_ci_as 中取值,因为右边表达式具有显式标志,优先于右边表达式的隐性标志:

SELECT *
FROM TestTab
WHERE GreekCol = LatinCol COLLATE greek_ci_as

下面是结果集。

id GreekCol LatinCol
----------- -------------------- --------------------
1 a A

(1 row affected)
--------------------------------------------------------

1、转成UNICODE
2、SQL2K可用COLLATE子句指定相同的排序規則.

-- 详细内容参考SQL联机丛书中的“排序规则的优先顺序”(在“索引”栏键入关键字:排序规则标签)
kourr2004 2007-02-14
  • 打赏
  • 举报
回复
路过帮顶

34,588

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧