【发布时间】:2018-04-27 19:07:21
【问题描述】:
有人可以解释如何保护表名不受排序规则设置的影响吗? 我目前收到错误消息:
(0 row(s) affected)
(0 row(s) affected)
(0 row(s) affected)
Msg 208, Level 16, State 1, Line 1
Invalid object name 'Dataarchive'.
Msg 208, Level 16, State 1, Line 1
Invalid object name 'MyDatabase.dbo.Dataarchive'.
从此 SQL:
USE master;
CREATE DATABASE MyDatabase COLLATE Danish_Norwegian_CI_AS;
GO
USE MyDatabase
CREATE TABLE DataArchive (id INT);
GO
SELECT * FROM DataArchive; -- succeeds
SELECT * FROM dataArcHIVE; -- succeeds
SELECT * FROM [MyDatabase].[dbo].[DataArchive]; -- succeeds
GO
SELECT * FROM Dataarchive; -- fails - interprets aa as special A character.
GO
SELECT * FROM [MyDatabase].[dbo].[Dataarchive]; -- fails
GO
USE MASTER;
DROP DATABASE MyDatabase;
GO
我希望排序规则适用于我的数据排序,而不是表名本身。
背景
出现这种情况是因为客户负责安装SQL Server,并将服务器排序规则设置为Danish_Norwegian_CI_AS,所以任何数据库,默认都有这个排序规则(我们在创建数据库的时候并没有专门设置数据库的排序规则)通过代码/脚本创建新数据库)。在这种情况下,我仍然没有想到我们的 表名 会被完全不同的解释。这意味着我们唯一的选择是在数据库上强制进行拉丁排序,如果用户想要不同的东西,他们可以指定每列排序?
【问题讨论】:
-
SELECT * FROM Dataarchvie;失败,因为你拼错了 -
谢谢@JuanCarlosOropeza - 我会更新 SQL - 即使拼写正确,它仍然会失败 :-)
-
您是如何尝试查询的?
aa是丹麦语中的一个二字。影响名称的不是数据库排序规则,您的客户很可能会将其翻译为å。几周前有一个类似的问题,我不敢相信aa不是aa。 -
@PanagiotisKanavos 我只是测试它。如果您删除 COLLATION,所有 5 个查询运行完全相同
-
如果 collate 是挪威语,则在创建表上使用括号也不能解决问题。我只是测试它:(
标签: sql sql-server tsql collation