首页 文章

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

提问于
浏览
0

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

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

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

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

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

1 回答

  • 1

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

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

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

相关问题