SQL Server排序规则和不区分大小写的标识符

时间:2014-10-22 20:27:56

标签: sql sql-server collation

我们有一个旧的SQL Server数据库,区分大小写的排序规则,但我们较新的应用程序代码要求列和表名不区分大小写。

因此,我们正在尝试转换数据库,以使列和表名称不区分大小写。

到目前为止,解决方案是使用不区分大小写的排序规则创建一个空数据库,然后从旧数据库生成脚本以在新数据库中重新创建模式(使用SQL Server Studio),然后将旧数据库中的数据导出到新数据库。

这个几乎可以工作,但旧的实例允许在忽略区分大小写时我们有一个唯一的约束违规时,几行相同的数据。

是否有一种简单的方法允许对表和列名称的SQL引用不敏感,而列数据仍被视为敏感(不必使用单独的排序规则单独修改列)?

1 个答案:

答案 0 :(得分:1)

创建数据库时,包含对象名称的系统表将获得数据库的排序规则 - 此处需要不敏感的排序规则。如果您希望所有数据仍然区分大小写,请更改数据库的默认排序规则,然后运行脚本。

更改排序规则不会更改已创建对象(包括系统表)的排序规则,但会影响后续对象。

根本不更改列排序规则,您可以在单个查询上覆盖它,例如WHERE A = 'Hi' COLLATE Latin1_General_CS_AI,但这样做效率很低,因为它会阻止使用索引进行搜索(因为需要转换)。无法使用归类覆盖定义约束 - 您必须变得复杂并使用单独的归类在计算列上定义它。