需要MsSQL整理建议。不区分大小写的查询但需要区分大小写的数据

时间:2015-12-02 11:16:15

标签: sql-server collation case-sensitive tempdb

我读了很多关于“选择正确的整理”和类似的东西,但我仍然没有针对以下问题的解决方案:

我们得到了以下星座: 我们将应用程序的数据库从Advantage Database切换到MsSQL Server 2014。

所有数据库都具有相同的排序规则“Latin1_General_CI_AS”(ReportServer和ReportServerTempDB除外)。我们选择了这种排序规则,因为“Latin1_General_CS_AS”会对我们现有的查询产生很大影响,因为查询中的表名会更改为区分大小写。

为了保留查询的数据顺序,我们使用“Latin1_General_CS_AS”创建了字符串列。

我们实际遇到的问题是,由于排序规则冲突,对temptables的连接查询失败。我很清楚,TempDB表将“Latin1_General_CI_AS”作为排序规则,并在与物理表的字符串列连接时抛出错误。

我们可以解决我们的问题,如果可以构建不区分大小写的查询,而不管数据库整理。

另一方面,我们可以通过将数据库的排序规则更改为“Latin1_General_CS_AS”来解决问题,并将查询中的所有表名更正为与原始表名相同。

如果我想到的第一个解决方案不可能,那么有人对如何解决整理问题有一个很好的建议吗?

第二种解决方案实际上并不切实可行。我们从不关心资本化,只关注大量的数据库交互,因为它值得纠正它。

我们的问题可能有第三种或第四种解决方案吗?

Thx 4提前帮助。

1 个答案:

答案 0 :(得分:0)

要强制排序最大化,可以使用COLLATE语句 请参阅:https://msdn.microsoft.com/en-us/library/ms184391.aspx

SELECT
a.col1,b.col2
FROM 
table a join table b 
ON  a.col1 collate databse_default = b.col2 collate databse_default