我们有一个旧的SQL Server数据库,区分大小写的排序规则,但我们较新的应用程序代码要求列和表名不区分大小写。
因此,我们正在尝试转换数据库,以使列和表名称不区分大小写。
到目前为止,解决方案是使用不区分大小写的排序规则创建一个空数据库,然后从旧数据库生成脚本以在新数据库中重新创建模式(使用SQL Server Studio),然后将旧数据库中的数据导出到新数据库。
这个几乎可以工作,但旧的实例允许在忽略区分大小写时我们有一个唯一的约束违规时,几行相同的数据。
是否有一种简单的方法允许对表和列名称的SQL引用不敏感,而列数据仍被视为敏感(不必使用单独的排序规则单独修改列)?
答案 0 :(得分:1)
创建数据库时,包含对象名称的系统表将获得数据库的排序规则 - 此处需要不敏感的排序规则。如果您希望所有数据仍然区分大小写,请更改数据库的默认排序规则,然后运行脚本。
更改排序规则不会更改已创建对象(包括系统表)的排序规则,但会影响后续对象。
根本不更改列排序规则,您可以在单个查询上覆盖它,例如WHERE A = 'Hi' COLLATE Latin1_General_CS_AI
,但这样做效率很低,因为它会阻止使用索引进行搜索(因为需要转换)。无法使用归类覆盖定义约束 - 您必须变得复杂并使用单独的归类在计算列上定义它。