如何强制列对SQL Server 2008 R2中的整个表是唯一的?

Gif*_*guy 18 sql database sql-server unique primary-key

我有一张有田地的桌子Description.我想确保没有两行具有相同的"描述",但我无法将描述写入我的标识列(我的ID列是一个int).

设置Description为第二个主键是否安全(除了我的ID已经是主键)?

Mit*_*eat 23

没有"辅助主键"这样的东西.每个表有一个主键.

在列上创建一个UNIQUE约束Description(非常不寻常的事情,BTW.例如,更常见的是创建一个唯一的索引Product Name而不是a Product description)或者如果Description列中有空值,则创建一个Filtered索引(SQL Server 2008)向前)

ALTER TABLE dbo.yourTable
   ADD CONSTRAINT UQ_yourTable_Description UNIQUE ([Description]);
Run Code Online (Sandbox Code Playgroud)

  • 这应该是接受的答案。 (2认同)

Lor*_*nzo 15

将"唯一"索引添加到"描述"列.

使用Sql Server Management Studio右键单击表并选择"设计".然后右键单击一列并选择"索引/键".系统将提示您使用以下窗口

替代文字

单击左下角的"添加",然后指定索引的属性.如果你想使用DDL脚本,那么使用这样的东西

CREATE UNIQUE NONCLUSTERED INDEX [IX_INDEXNAME] ON [dbo].[TABLENAME] 
(
    [Description] ASC
)
WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, SORT_IN_TEMPDB = OFF, IGNORE_DUP_KEY = OFF, DROP_EXISTING = OFF, ONLINE = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON) ON [PRIMARY]
GO
Run Code Online (Sandbox Code Playgroud)

  • 我建议使用唯一性约束而不是索引.约束语法是实现键约束的更常规方式.与索引语法不同,约束是标准SQL,更有可能被数据库的其他用户和访问数据库模式元数据的软件工具理解和识别.唯一性约束会自动为您创建索引. (3认同)
  • 我还建议您始终在脚本中执行此操作(以及任何其他DDL更改),以便可以对它们进行适当的版本控制并存储在您的控制系统中.永远不应从Management Studio GUI进行数据库更改. (2认同)