报错如下:Cannot resolve the collation conflict between "Chinese_PRC_CI_AS" and "Chinese_PRC_90_CI_AS" in the equal to operation.

解决方案 »

  1.   

    根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS执行存储过程还是报同样的报错。为啥
      

  2.   

    根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS执行存储过程还是报同样的报错。为啥你的存储过程是不是有临时表的操作咧
      

  3.   

    根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS执行存储过程还是报同样的报错。为啥你的存储过程是不是有临时表的操作咧
    没有 ,我在其他地方(其他同样的服务器上执行)或本地执行都是没有问题的,但是在这台服务器的数据库上执行 就一直报这个如上的错,后来根据如上的错误在此数据库名下修改了已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS,也还是报如上的错误
      

  4.   

    根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS执行存储过程还是报同样的报错。为啥你的存储过程是不是有临时表的操作咧
    没有 ,我在其他地方(其他同样的服务器上执行)或本地执行都是没有问题的,但是在这台服务器的数据库上执行 就一直报这个如上的错,后来根据如上的错误在此数据库名下修改了已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS,也还是报如上的错误
    要再修改表的字符集
    字符型的列还是修改前的字符集
      

  5.   

    根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS执行存储过程还是报同样的报错。为啥
    除了数据库的排序字符集须一致,
    数据库中表字段的排序字符集也须一致..
      

  6.   

    数据库的字符集已将:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS"
    且查看了 存储过程中所用到的表,其每个表的属性中,查看其字符集也都显示Chinese_PRC_90_CI_AS了 
      

  7.   

    数据库的字符集已将:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS"
    且查看了 存储过程中所用到的表,其每个表的属性中,查看其字符集也都显示Chinese_PRC_90_CI_AS了 
      

  8.   

    数据库的字符集已将:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS"
    且查看了 存储过程中所用到的表,其每个表的属性中,查看其字符集也都显示Chinese_PRC_90_CI_AS了 

    select b.name tablename,
           a.name columnname,
           a.collation_name
    from sys.columns a,sys.objects b
    where a.object_id=b.object_id
    and b.type='U' 
      

  9.   

    用以下语句查看表字段的排序字符集,
    确认2个数据库中,存储过程中所用到的表的字段的排序规则都须一样..use [数据库名]select a.name,a.collation_name 
     from sys.columns a
     inner join sys.types b on a.system_type_id=b.system_type_id
     inner join sys.objects c on a.object_id=c.object_id
     where b.name in ('text','nchar','nvarchar','char','varchar')
     and c.type='U' and c.name='[表名]'
      

  10.   

    如果不一至要重装数据库?
    --> 不用重装数据库,可以用alter table...语句修改.
      

  11.   


    我的存储过程内容,如下:
    ALTER PROCEDURE [Vehicles].[GetVehicleByUserLogin]
    @UserLogin NVARCHAR(50)     --登录名
    ASBEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

        WITH temp AS (SELECT  ROW_NUMBER() OVER(ORDER BY t3.VehicleBasicInfoID DESC) AS RN, t3.VehicleLicensePlateNumber,
    t5.UserPhone,t8.EquipmentCardNum AS SbCardNum,t3.VehicleType,t3.VehicleWeight,t3.VehicleLength,t3.OutputVolume,t3.VehicleBasicInfoID,
    t5.UserName, t7.Province,t7.CityName,t7.DetailDesc,t7.CreateTimeStamp,t5.UserInfoID FROM 
    Users.UserRegister t1
    INNER JOIN Users.UserRegister_VehicleBasicInfo_lk t2 ON t2.UserRegisterID = t1.UserRegisterID
    INNER JOIN Vehicles.VehicleBasicInfo t3 ON t3.VehicleBasicInfoID = t2.VehicleBasicInfoID
    LEFT JOIN Desktop.VehicleBasicInfo_UserInfo t4 ON t4.VehicleBasicInfoID = t3.VehicleBasicInfoID
    LEFT JOIN ack.UserInfo t5 ON t5.UserInfoID = t4.UserInfoID 
    LEFT JOIN Equipment.EquipmentBindService_lk t6 ON t6.VehicleBasicInfoID=t3.VehicleBasicInfoID
    LEFT JOIN Equipment.EquipmentStorage t8  ON t6.EquipmentStorageID=t8.EquipmentStorageID
    LEFT JOIN WebService.PositionHistory t7 ON t7.MobileNum = t8.EquipmentCardNum
    --LEFT JOIN WebService.PositionHistory t7 ON t7.MobileNum = t6.SbCardNum
    --LEFT JOIN ACK.ACKSbgm t6 ON t6.SbgmBdCph = t3.VehicleLicensePlateNumber
    --LEFT JOIN WebService.PositionHistory t7 ON t7.MobileNum = t6.SbCardNum
    WHERE t1.UserLoginName =@UserLogin 
    ---AND (t6.BindDate<GETDATE() AND t6.UnbindDate>GETDATE())
    AND (t2.BindTime<GETDATE() AND t2.UnBindTime>GETDATE())
    )

    SELECT * FROM  temp 
    END
    GO
      

  12.   

    根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS执行存储过程还是报同样的报错。为啥你的存储过程是不是有临时表的操作咧,
    是的 我的存储过程内容为:
    ALTER PROCEDURE [Vehicles].[GetVehicleByUserLogin]
    @UserLogin NVARCHAR(50)     --登录名
    ASBEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

        WITH temp AS (SELECT  ROW_NUMBER() OVER(ORDER BY t3.VehicleBasicInfoID DESC) AS RN, t3.VehicleLicensePlateNumber,
    t5.UserPhone,t8.EquipmentCardNum AS SbCardNum,t3.VehicleType,t3.VehicleWeight,t3.VehicleLength,t3.OutputVolume,t3.VehicleBasicInfoID,
    t5.UserName, t7.Province,t7.CityName,t7.DetailDesc,t7.CreateTimeStamp,t5.UserInfoID FROM 
    Users.UserRegister t1
    INNER JOIN Users.UserRegister_VehicleBasicInfo_lk t2 ON t2.UserRegisterID = t1.UserRegisterID
    INNER JOIN Vehicles.VehicleBasicInfo t3 ON t3.VehicleBasicInfoID = t2.VehicleBasicInfoID
    LEFT JOIN Desktop.VehicleBasicInfo_UserInfo t4 ON t4.VehicleBasicInfoID = t3.VehicleBasicInfoID
    LEFT JOIN ack.UserInfo t5 ON t5.UserInfoID = t4.UserInfoID 
    LEFT JOIN Equipment.EquipmentBindService_lk t6 ON t6.VehicleBasicInfoID=t3.VehicleBasicInfoID
    LEFT JOIN Equipment.EquipmentStorage t8  ON t6.EquipmentStorageID=t8.EquipmentStorageID
    LEFT JOIN WebService.PositionHistory t7 ON t7.MobileNum = t8.EquipmentCardNum
    --LEFT JOIN WebService.PositionHistory t7 ON t7.MobileNum = t6.SbCardNum
    --LEFT JOIN ACK.ACKSbgm t6 ON t6.SbgmBdCph = t3.VehicleLicensePlateNumber
    --LEFT JOIN WebService.PositionHistory t7 ON t7.MobileNum = t6.SbCardNum
    WHERE t1.UserLoginName =@UserLogin 
    ---AND (t6.BindDate<GETDATE() AND t6.UnbindDate>GETDATE())
    AND (t2.BindTime<GETDATE() AND t2.UnBindTime>GETDATE())
    )

    SELECT * FROM  temp 
    END
      

  13.   

    根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS执行存储过程还是报同样的报错。为啥你的存储过程是不是有临时表的操作咧
    有的,这个有什么影响么?我的存储过程内容已贴出来了,帮看下呢。
      

  14.   

    改什么内容呢,能具体点么 ,因为我的存储过程中用到的表都已为Chinese_PRC_90_CI_AS ( 数据库的字符集已将:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS"”),该存储过程的内容已贴出来了
      

  15.   


    什么意思,意思是某张表中的某个字段的字符类型,比如:name nvarchar(20)  类似这个nvarchar(20)的字符类型出问题 是这个意思么?
      

  16.   

    改什么内容呢,能具体点么 ,因为我的存储过程中用到的表都已为Chinese_PRC_90_CI_AS ( 数据库的字符集已将:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS"”),该存储过程的内容已贴出来了
    alter table table_name
    alter column column_name varchar/nvarchar/... 
    collate Chinese_PRC_90_CI_AS
      

  17.   


    什么意思,意思是某张表中的某个字段的字符类型,比如:name nvarchar(20)  类似这个nvarchar(20)的字符类型出问题 是这个意思么?在管理器里找字段属性中的collation
      

  18.   


    什么意思,意思是某张表中的某个字段的字符类型,比如:name nvarchar(20)  类似这个nvarchar(20)的字符类型出问题 是这个意思么?在管理器里找字段属性中的collation
      

  19.   


    什么意思,意思是某张表中的某个字段的字符类型,比如:name nvarchar(20)  类似这个nvarchar(20)的字符类型出问题 是这个意思么?在管理器里找字段属性中的collation根据如上的报错,已将数据库的字符集:Chinese_PRC_CI_AS" 改为 "Chinese_PRC_90_CI_AS 执行存储过程还是报同样的报错,双击这个报错,sql会指出存储过程中哪条语句出问题的,然后我根据这个在如上在存储过程内容中
    修改了问题解决,同样的几个存储过程 涉及到这样子的也同样修改了,这样子问题就解决了