有没有一种方法,使既独特又区分大小写列?
我希望能够把
ABCDE ABCDE和
在唯一的列。
有没有一种方法,使既独特又区分大小写列?
我希望能够把
ABCDE ABCDE和
在唯一的列。
该独特性与唯一性约束强制执行。
是否唯一索引是大小写敏感的由服务器(或表的) 排序规则定义。
你可以用此查询数据库的当前归类:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'Collation') SQLCollation;
你应该得到的东西,如:
SQLCollation
————————————
SQL_Latin1_General_CP1_CI_AS
在此,“CI_AS”在核对的端部是指:CI =不区分大小写,AS =重音敏感。
这是可以改变的,无论你需要它。 如果你的数据库和/或表确实有一个区分大小写的排序规则,我希望的是,你的指数的独特性将是大小写敏感的为好,如您ABCDEF和ABCDEF既要作为唯一的字符串可以接受的。
渣
更新:
我只是尝试这样做(的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
和被侵犯没有关于唯一索引错误。
在某些情况下,人们需要做的已经有一个现有的表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
我需要从一个区分大小写的数据库导入数据。 当我试图把主键上,即源的主键列我不能这样做,因为重复的键。 我改变了排序规则列(VARCHAR)来区分大小写(右键单击该表,选择设计,突出显示要更改并点击整理的省略号列),现在它工作正常。 (SQL Server 2008 R2的64位)。
感谢@Devraj Gadhavi的一步一步,因为这正是我需要做的一样好。 我正要使这些脚本,但随后(使用SSMS 2008 R2),我取得了一个比较懒惰:-)方式相同。 在树视图我位于我的表和列,然后右键点击我想改变的整理,并选择“修改”的列。 在显示的窗口,我改变了整理的性质区分大小写的一个,然后在窗口(其中列以表格形式列出)的顶部开放空间的任何地方我右单击并选择“生成更改脚本......”