打印本文 打印本文 关闭窗口 关闭窗口
SQL的排序规则
作者:武汉SEO闵涛  文章来源:敏韬网  点击数1370  更新时间:2007/11/14 13:13:35  文章录入:mintao  责任编辑:mintao

 
问题说明 最近我执行一个SQL语句是报错
SELECT TABLE_CATALOG, TABLE_SCHEMA, TABLE_NAME, TABLE_TYPE, ExtendedProperty.Value AS ProgrammaticAlias
FROM INFORMATION_SCHEMA.TABLES LEFT JOIN FN_LISTEXTENDEDPROPERTY('ProgrammaticAlias', 'user', 'dbo', 'table', default, default, default) AS ExtendedProperty
ON INFORMATION_SCHEMA.TABLES.TABLE_NAME = ExtendedProperty.objName
WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_NAME != 'dtProperties' AND TABLE_CATALOG = 'entlibquickstarts'
 
查询报错:无法解决 equal to 操作的排序规则冲突。
 
解决方法 问题处在SQL的排序规则不同
先举一个简单的例子:
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')
运行SELECT 
FROM TestTab
WHERE GreekCol = LatinCol 会出现上面同样的错误,原因就是两个列的排序规则不同。
下面的查询是不会错,因为统一了排序规则
SELECT 
FROM TestTab
WHERE GreekCol = LatinCol COLLATE greek_ci_as
而上面的解决方法是修改数据库的排序规则
ALTER DATABASE entlibquickstarts COLLATE Chinese_PRC_CI_AS

 
 
详细解释 有三种情况下需要建立排序规则
1.当创建数据库时
2.当创建表时
3.当指定文字字符串时
如果项混合规则排序请参考SQL帮助文档
 
涉及产品 SQL Server  作者: 田政

 

打印本文 打印本文 关闭窗口 关闭窗口