如何在SSMS 2012中创建唯一约束

13

我对SQL Server完全是新手,我使用的版本是2012。

我有一个具有以下结构的表:

Attendance
--------------
TagID     (FK)
SessionID (FK)       
ScanningTime

我需要基于两列 (TagIDSessionID) 创建一个唯一约束。

但我不确定该如何操作。我已经创建了一个查询并尝试了这段代码:

ALTER TABLE Attendance ADD CONSTRAINT UNIQUE NONCLUSTERED
(
    TagID,
    SessionID
)

但是当我尝试执行它时,收到以下错误信息:

Msg 156, Level 15, State 1, Line 2
错误:关键字“UNIQUE”附近存在语法错误。

在SSMS中更改表的正确方式是什么?每次更改时我是否应该创建查询?

2个回答

11

你已经接近成功了。如果你使用constraint关键字,你需要提供一个名称。

ALTER TABLE Attendance ADD CONSTRAINT UQ_TagID_SessionID UNIQUE NONCLUSTERED
(
    TagID,
    SessionID
)

或者另外一种选择

ALTER TABLE Attendance ADD UNIQUE NONCLUSTERED
(
    TagID,
    SessionID
)

也可以工作,但约束条件会自动命名


谢谢,你能回答我加粗的问题吗? - jaspernorth
1
我强烈建议使用命名约束 - 第一选项。 - Nenad Zivkovic
@jaspernorth - 回复:针对你的大胆问题,我的偏好通常是避免使用设计师并使用TSQL,但也可以通过SSMS中的索引和键对话框来进行可视化操作。 - Martin Smith

11
如果您更喜欢通过GUI而不是ALTER语句来执行操作,您也可以在对象浏览器中右键单击表格,选择设计,然后在空白背景上右键单击,选择索引/键。这将打开一个对话框,在其中选择“唯一键”作为类型。
通过GUI进行更改是一种快速的方式,适用于您很少需要并且对语法不确定的操作。
许多管理工具对话框 - 但可能不包括此对话框,因为它是表格设计器对话框的子对话框 - 在左上角有一个“脚本”按钮,它将您通过GUI配置的操作写入查询窗口,以便您可以将它们保存以备将来类似的任务,或者复制和粘贴它们,如果您需要类似的操作。

3
关闭对话框后,约束并不会立即创建,而是等到保存/关闭表设计时才创建。因此,您可以再次右键单击空白背景,并选择“生成更改脚本…”选项。 - Nenad Zivkovic
@NenadZivkovic 你的评论真的很有帮助;)。我没有想到在添加约束后要点击保存。 - MatPag

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接