SQL Server 2008中唯一的列会是区分大小写(SQL Server 2008 Unique

2019-07-20 18:12发布

有没有一种方法,使既独特又区分大小写列?

我希望能够把

ABCDE ABCDE

在唯一的列。

Answer 1:

该独特性与唯一性约束强制执行。

是否唯一索引是大小写敏感的由服务器(或表的) 排序规则定义。

你可以用此查询数据库的当前归类:

SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;

你应该得到的东西,如:

SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS

在此,“CI_AS”在核对的端部是指:CI =不区分大小写,AS =重音敏感。

这是可以改变的,无论你需要它。 如果你的数据库和/或表确实有一个区分大小写的排序规则,我希望的是,你的指数的独特性将是大小写敏感的为好,如您ABCDEFABCDEF既要作为唯一的字符串可以接受的。

更新:

我只是尝试这样做(的SQL Server 2008开发版64位) - 为我的作品(我的数据库通常使用“Latin1_General_CI_AS排序规则,但我甚至可以定义每个表中的不同一个/每VARCHAR列):

CREATE TABLE TestUnique
    (string VARCHAR(50) COLLATE SQL_Latin1_General_Cp1_CS_AS)

CREATE UNIQUE INDEX UIX_Test ON dbo.TestUnique(string)

INSERT INTO dbo.TestUnique(string) VALUES ('abc')
INSERT INTO dbo.TestUnique(string) VALUES ('ABC')

SELECT * FROM dbo.TestUnique

我得到的结果:

string
ABC
abc

和被侵犯没有关于唯一索引错误。



Answer 2:

在某些情况下,人们需要做的已经有一个现有的表unique key/index上定义varchar / nvarchar列,这里是脚本。

ALTER TABLE [YourTable] DROP CONSTRAINT [UIX_YourUniqueIndex]
GO

ALTER TABLE [YourTable] ALTER COLUMN [YourColumn] [nvarchar](50) COLLATE Latin1_General_CS_AS NOT NULL;
GO

ALTER TABLE [YourTable] ADD  CONSTRAINT [UIX_YourUniqueIndex] UNIQUE NONCLUSTERED 
(
    [YourColumn] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
GO


Answer 3:

我需要从一个区分大小写的数据库导入数据。 当我试图把主键上,即源的主键列我不能这样做,因为重复的键。 我改变了排序规则列(VARCHAR)来区分大小写(右键单击该表,选择设计,突出显示要更改并点击整理的省略号列),现在它工作正常。 (SQL Server 2008 R2的64位)。



Answer 4:

感谢@Devraj Gadhavi的一步一步,因为这正是我需要做的一样好。 我正要使这些脚本,但随后(使用SSMS 2008 R2),我取得了一个比较懒惰:-)方式相同。 在树视图我位于我的表和列,然后右键点击我想改变的整理,并选择“修改”的列。 在显示的窗口,我改变了整理的性质区分大小写的一个,然后在窗口(其中列以表格形式列出)的顶部开放空间的任何地方我右单击并选择“生成更改脚本......”



文章来源: SQL Server 2008 Unique Column that is Case Sensitive