部署窗口2012时出现Windows排序规则错误

时间:2017-09-20 08:26:35

标签: sql-server collation

我的问题可能与this question具有相同的标题:在部署实时时出现Sql排序规则问题。然而,这个问题是8岁,并讨论不同的SQL服务器上的问题。

我的信息如下:

  • dev env:windows 8
  • test env:windows 2012

来自this问题:

Select City COLLATE DATABASE_DEFAULT AS Place, State, Country FROM DEPT1
UNION ALL
Select '' AS Place, 'Arizona' As State, Country FROM DEPT2

在sql server上正常工作。

使用相同的连接字符串(到同一个数据库)部署到测试服务器时出现问题 所以我猜这个问题只与windows os差异有关。

错误信息是:

  

无法执行varchar值到varchar的隐式转换,因为由于" Turkish_CI_AS"之间的整理冲突导致值的整理未解决和" Turkish_100_CI_AI"在UNION ALL运算符中。

当我运行UNION sql查询时。

在仅更改Windows操作系统的上下文中,可能是什么原因以及如何处理给定错误?

编辑:关闭问题,因为同事通知数据库不一样,所以问题不再有效

1 个答案:

答案 0 :(得分:0)

请在两种环境中执行此查询:

select COLUMNPROPERTYEX(object_id('dbo.DEPT1'), 'City', 'Collation') as column_collation,
       DATABASEPROPERTYEX(db_name(), 'Collation') as db_collation, db_name() as db_name;

如果您从问题中得到确切查询的错误,则您的列排序规则与数据库排序规则之间存在差异。

如果您没有明确定义列排序规则,那么它将从数据库排序规则继承,并且在您执行查询时,根本不需要COLLATE。

如果您的查询在另一个数据库的上下文中执行,或者您使用临时表(使用tempdb的排序规则创建),则需要使用COLLATE。

因此,请再次检查您的数据库排序规则,列排序规则和数据库(可能您的查询是在另一个数据库中执行,然后您认为)