我的问题可能与this question具有相同的标题:在部署实时时出现Sql排序规则问题。然而,这个问题是8岁,并讨论不同的SQL服务器上的问题。
我的信息如下:
SQL Server是Turkish_100_CI_AI Windows Collation Name (Transact-SQL)
数据库是Turkish_CI_AS(SQL Server Collation Name):
和
来自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操作系统的上下文中,可能是什么原因以及如何处理给定错误?
编辑:关闭问题,因为同事通知数据库不一样,所以问题不再有效
答案 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。
因此,请再次检查您的数据库排序规则,列排序规则和数据库(可能您的查询是在另一个数据库中执行,然后您认为)