【问题标题】:"Invalid object name" error caused by letter cases in table name表名中字母大小写导致的“无效对象名”错误
【发布时间】:2018-12-12 10:40:14
【问题描述】:

这是一个很奇怪的问题。我有一个完全命名为“UncSetup”的表。该数据库附加到 SQL Server 2012 express 实例并在 SSMS 中访问。

我可以执行这个查询:

SELECT * FROM UNcSEtUp

但不是这个:

SELECT *FROM UnCSetup

给出“无效的对象名称”错误。

证明:

这与 SSMS 中的 IntelliSense 无关。执行结果错误。

我有许多其他数据库具有完全相同的表模式,其中表名的所有变体都可以正确执行。所以我的猜测是这个数据库以某种方式损坏了。我该怎么做才能修复这个数据库?

【问题讨论】:

  • 它没有损坏,它只是使用了区分大小写的排序规则。
  • 我相信在匈牙利语中CsC 后跟S 是一个单独的字母,对吗?所以实际上区分大小写本身并不是一个问题,但它仍然与排序规则有关
  • 我怀疑这是您服务器的排序规则,而不是数据库。 SELECT collation_name FROM sys.databases WHERE [name] = N'YourDatabase'; 返回什么(显然将 YourDatabase 替换为正确的名称)。
  • 是的,这个检查出来:比较SELECT 1 WHERE 'UNcSEtUp' = 'UncSetup' COLLATE Hungarian_CI_ASSELECT 1 WHERE 'UnCSetup' = 'UncSetup' COLLATE Hungarian_CI_AS。 Per Damian,匈牙利语 cS CSSELECT 1 WHERE 'cS' = 'CS' COLLATE Hungarian_CI_AS 什么都不返回)。道德:始终使用确切的对象名称,您不会受到排序规则的惩罚。

标签: sql-server ssms


【解决方案1】:

@Damien_The_Unbeliever 和 @Jeroen Mostert 在 cmets 中回答了这个问题。 数据库的排序规则是 Hungarian_CI_AS,其中“Cs”是一个字母而不是两个字母。 https://en.wikipedia.org/wiki/Hungarian_alphabet

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 2013-11-08
    • 1970-01-01
    相关资源
    最近更新 更多