原因是这样的;
临时表是建立在tempdb数据库里的,当然默认使用的是tempdb的排序规则。由此可以推断,你的数据库和tempdb数据库的排序规则不一致
你可以这样解决
用'create table #temptbl的时候,指定排序规则,比如:
create table #temptbl
(id int identity(1,1),
 aa char(10) COLLATE Chinese_PRC_CI_AS
)

解决方案 »

  1.   

    请参考:
    1、在查询时指定排序规则,这样无须对数据库进行任何修改
    select * from a join b on a.aa=b.bb collate chinese_prc_ci_as --(可以任意指定一种sqlserver支持的排序规则)2、修改联结字段的排序规则,使之统一可以在企业管理器中,修改表的设计
    也可以用sql语句
    alter table a  ALTER COLUMN aa char(10)  COLLATE Latin1_General_CI_AS3、使用sql server的工具Rebuildm.exe 更改 Microsoft SQL Server2000 实例的排序规则设置4、重新安装sql server,选择需要的排序规则
    --举例
    create table a
    (id int identity(1,1),
     aa char(10) COLLATE Chinese_PRC_CI_AS,  --199 Chinese_PRC_CI_AS 
     ab char (10) COLLATE Latin1_General_CI_AS
    )
    go
    insert into a 
    select 'am','an'
    union all select 'amm','ann'
    union all select 'ammm','annn'
    gocreate table b
    (id int identity(1,1),
     ba char(10) COLLATE Chinese_PRC_CI_AS,
     bb char (10) COLLATE Latin1_General_CI_AS
    )
    go
    insert into b
    select 'bm','bn'
    union all select 'bmm','bnn'
    union all select 'bmmm','bnnn'如果在查询分析器中执行select * from a join b on a.aa=b.bb查询语句,则会出现如下错误信息:
    服务器: 消息 446,级别 16,状态 9,行 1
    无法解决 equal to 操作的排序规则冲突。