我在管理器里面看了,数据库默认排序是Chinese_Taiwan_Stroke_CI_AS,所有表的默认排序也是Chinese_Taiwan_Stroke_CI_AS表结构(在过程里面自动创建):exec ('CREATE TABLE [dbo].['+@tb_name+'] (
[SerialNo] [numeric](18, 0) IDENTITY (1, 1) not NULL ,
[ModelName] [varchar] (30) COLLATE Chinese_PRC_CI_AS NULL ,
[BarcodeNo] [varchar] (30) COLLATE Chinese_PRC_CI_AS not NULL ,
[Station] [varchar] (5) COLLATE Chinese_PRC_CI_AS not NULL ,
[Information] [varchar] (4096) COLLATE Chinese_PRC_CI_AS not NULL ,
[Upload_Date] [datetime]  default getdate() not NULL 
) ON [PRIMARY]')
刚开始在SQL2000上运行的时候没有问题(没加COLLATE Chinese_PRC_CI_AS),现在换到SQL2008上就一直提示这个问题了。我是要按Upload_date desc排序的。
SQL2000:select * from Y2013_2 where 1=1  and BarcodeNo='CC16711214' and Station='1528' and Upload_Date >='2010-01-12' and Upload_Date <='2013-07-03' union select * from Y2013_1 where 1=1  and BarcodeNo='CC16711214' and Station='1528' and Upload_Date >='2010-01-12' and Upload_Date <='2013-07-03' order by upload_date desc 
SQL2008:select * from Y2013_2 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2013_1 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2012_2 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2012_1 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2011_2 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2011_1 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2010_2 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2010_1 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2009_2 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2009_1 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2008_2 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2008_1 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2007_2 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_AS union select * from Y2007_1 where 1=1  and BarcodeNo='1234' COLLATE Chinese_PRC_CI_ASMsg 468, Level 16, State 9, Line 1
无法解决 UNION 运算中 "Chinese_Taiwan_Stroke_CI_AS" 和 "Chinese_PRC_CI_AS" 之间的排序规则冲突。

解决方案 »

  1.   

    SQL2000用的是繁体版,2008用的是简体版的。
      

  2.   

    这个查询语句是用存储过程产生的,过程可以参考:http://bbs.csdn.net/topics/390504682
      

  3.   

    需要使用COLLATE 子句指定数据库的默认排序规则保持两边一致。
    下面是个例子:
    Insert into Security.Report (Name)
                  Select C.Path From SSRS.Catalog C 
            Where C.Path Collate Database_Default Like @ReportPath + '/%' 
                  And C.Path Collate Database_Default Not In (Select Name From Security.Report R)
      

  4.   


    USE master;
    GO
    ALTER DATABASE DBName
    COLLATE Chinese_PRC_CI_AS;
    GO可以修改数据库排序规则参考:http://msdn.microsoft.com/zh-cn/library/ms175835.aspx
      

  5.   

    我弄好了:
    在查询的每个字段后面设置才可以,在where后面不行。如果是单条的查询可以,但跟了union就不行。select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2013_2 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2013_1 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2012_2 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2012_1 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2011_2 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2011_1 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2010_2 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2010_1 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2009_2 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2009_1 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2008_2 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2008_1 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2007_2 where 1=1  and BarcodeNo='1234' union select SerialNo,ModelName COLLATE Chinese_PRC_CI_AS,BarcodeNo COLLATE Chinese_PRC_CI_AS,Station COLLATE Chinese_PRC_CI_AS,Information COLLATE Chinese_PRC_CI_AS,Upload_Date from Y2007_1 where 1=1  and BarcodeNo='1234' order by upload_date desc