【问题标题】:Case-sensitive database collation, but case-insensitive SQL queries区分大小写的数据库排序规则,但不区分大小写的 SQL 查询
【发布时间】:2012-02-22 07:42:21
【问题描述】:

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

是否可以拥有带有 CI 存储过程、查询等的 CS 数据库...?

【问题讨论】:

  • 为什么不修复数据库排序规则...?
  • 如果所有列都是最好的解决方案,我需要在某些列上使用 CS
  • 仅在需要时将 CS 添加到列中。如果所有列都是 CS,那么修复您的查询,因为您不能方便地混合 CI 和 CS
  • 关于@Impaler 的赏金:不,没有选项可以为系统对象和用户对象设置不同的排序规则。对象名称(如表)作为sysname 存储在sys 对象中,这是nvarchar(128) NOT NULL 的同义词。这些列继承了数据库的默认排序规则,如果您更改该排序规则,它们也会被更改 (documentation)。因此,任何更改都会影响 所有 列;用户和系统。

标签: sql sql-server database tsql sql-server-2008


【解决方案1】:

不,数据库级别的区分大小写适用于对象名称。但是,您可以创建一个不区分大小写的数据库,并且对于您创建的每个文本列,将排序规则修改为区分大小写的排序规则。我相信这会给你你所要求的行为。

【讨论】:

    【解决方案2】:

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

    注意,如果列是主键的一部分,它不会让您更改列的排序规则。

    【讨论】:

      猜你喜欢
      • 2014-05-10
      • 2011-05-11
      • 2011-03-18
      • 2019-06-19
      • 2015-02-10
      • 2012-06-26
      • 2016-01-17
      • 2011-06-01
      • 1970-01-01
      相关资源
      最近更新 更多