大小写敏感的数据库排序规则,但大小写不敏感的SQL查询。

6

我正在使用SSIS运行一个项目,现在创建了一个新的数据库,并设为区分大小写(CS)的排序规则,但所有的查询、存储过程等都以不区分大小写的方式编写,因此SQL Server现在无法识别它们。我需要在查询中将表名、列名等改为与SQL Server中完全一样。

是否可能拥有一个使用区分大小写排序规则(CS)的数据库,并使用不区分大小写的存储过程、查询等呢?


为什么不修复数据库排序规则(collation)呢? - gbn
我需要在某些列上使用CS,如果所有列都是CS,那将是最好的解决方案。 - Justin
只在需要的列中添加CS。如果所有列都是CS,则修复您的查询,因为您不能方便地混合CI和CS。 - gbn
关于@Impaler提出的悬赏问题:不,没有选项可以为系统对象和用户对象设置不同的排序规则。对象名称(如表格的名称)存储在sys对象中作为sysname,这是nvarchar(128)NOT NULL的同义词。这些列继承数据库的默认排序规则,如果更改了该排序规则,则它们也会被更改(文档)。因此,任何更改都会影响所有列,包括用户和系统。 - Thom A
2个回答

7

在数据库层面上,不区分大小写适用于对象名称。然而,你可以创建一个不区分大小写的数据库,并为每个文本列修改排序规则为区分大小写。我认为这会给你所需的行为。


3

您可以在列级别应用排序规则。要执行此操作,请在SQL Server Management Studio中右键单击表,然后单击“设计”,然后选择列,在“表设计器”部分的列属性菜单下,您可以选择使用其他排序规则而不是数据库默认值。

请注意,如果某一列是主键的一部分,则无法更改该列的排序规则。


我认为这是我们使用情况下最方便的解决方案。10年过去了,SQL Server的设计仍然没有区分数据库对象和VARCHAR列的大小写敏感性。显式排序规则很麻烦,但按预期工作。 - The Impaler

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接