SQL Server排序规则区分大小写

时间:2014-03-31 11:42:37

标签: c# sql sql-server

我需要在SQL 2012中确定数据库的排序规则,并从中提取区分大小写。我该怎么做? 在我知道collasion区分大小写后,我需要在C#中使用它。 SQL Server collasion区分大小写和C#之间是否存在映射?

2 个答案:

答案 0 :(得分:5)

您的问题存在根本缺陷,因为它会将整理的所有特征降低到仅区分大小写。在这个假设上编写代码会导致代码错误,我只有两个单词添加:Turkish I。为了正确,您必须在C#代码中使用与数据库中的排序规则相同的排序规则,而不是简单地使用ToLowerCase()或ToUpperCase()。

  

我问如何将它映射到C#

鉴于SQL Server支持的排序规则列表已知并且已修复(对于每个版本),我建议对从SQL返回collation nameC# culture name的映射进行硬编码。你只需要构建一次列表,相当容易构建。您需要以某种方式处理可能附带新排序规则的SQL Server的未来版本。

警告(再次......)你试图解决的问题远非微不足道。 SQL Server 使用给定的排序规则持久化数据,这样就无法对排序规则进行更改(如果排序规则表示在B之后排序并保存数据,则将排序规则更改为在B将导致数据之前进行排序读取持久化数据时的损坏,相同的等式比较,认为外键,唯一和检查约束等等)。但是,平台(Windows)会不时地更改排序规则设置,通常用于修复现有排序规则中的错误。您的C#文化将使用当前平台整理,这可能与2008年在同一整理中捕获的SQL不同。在该桥下有许多龙...

答案 1 :(得分:0)

  

SQL Server collasion区分大小写和C#之间是否存在映射?

是的,鉴于:

http://technet.microsoft.com/en-us/library/ms174396.aspx

表示具有默认排序规则的属性。

所以,有一个映射。根本不是你想要的简单财产。

虽然没有相关性 - SQL Server映射非常复杂。名称比较是最好的选择。