【发布时间】:2018-12-12 10:40:14
【问题描述】:
这是一个很奇怪的问题。我有一个完全命名为“UncSetup”的表。该数据库附加到 SQL Server 2012 express 实例并在 SSMS 中访问。
我可以执行这个查询:
SELECT * FROM UNcSEtUp
但不是这个:
SELECT *FROM UnCSetup
给出“无效的对象名称”错误。
这与 SSMS 中的 IntelliSense 无关。执行结果错误。
我有许多其他数据库具有完全相同的表模式,其中表名的所有变体都可以正确执行。所以我的猜测是这个数据库以某种方式损坏了。我该怎么做才能修复这个数据库?
【问题讨论】:
-
它没有损坏,它只是使用了区分大小写的排序规则。
-
我相信在匈牙利语中
Cs与C后跟S是一个单独的字母,对吗?所以实际上区分大小写本身并不是一个问题,但它仍然与排序规则有关 -
我怀疑这是您服务器的排序规则,而不是数据库。
SELECT collation_name FROM sys.databases WHERE [name] = N'YourDatabase';返回什么(显然将YourDatabase替换为正确的名称)。 -
是的,这个检查出来:比较
SELECT 1 WHERE 'UNcSEtUp' = 'UncSetup' COLLATE Hungarian_CI_AS和SELECT 1 WHERE 'UnCSetup' = 'UncSetup' COLLATE Hungarian_CI_AS。 Per Damian,匈牙利语cSCS(SELECT 1 WHERE 'cS' = 'CS' COLLATE Hungarian_CI_AS什么都不返回)。道德:始终使用确切的对象名称,您不会受到排序规则的惩罚。
标签: sql-server ssms