SQL Server Management Studio是否为表隐式创建了此约束?

时间:2017-03-22 21:53:54

标签: sql-server

Microsoft SQL Server Management Studio如何命名唯一键的约束?

当我运行以下sql命令时

INSERT INTO alert_template (object_type_id, object_id, alert_object_type_id, alert_object_id, monitor_type_bit_flags, name)
 VALUES (5, null, 5, 0, 2147483647, 'alert-template-system-default');

我收到了错误消息

  

违反UNIQUE KEY约束'u_alert_template_object_association'。无法在对象'dbo.alert_template'中插入重复键。

错误消息引用哪个唯一键?

我在表u_alert_template_object_association中找不到名为dbo.alert_template的约束。 SQL Server Management Studio是否隐式创建了约束?如果是,它用于命名约束的约定是什么?

感谢。

更新

我刚刚发现创建表的语句定义了约束u_alert_template_object_association。但是我没有在SQL管理工作室的对象资源管理器窗口中找到约束,Constraints下的dbo.alert_template没有列出约束u_alert_template_object_association,这是导致我混淆的原因。帖子。那么Object Exploere窗口不应该显示在表的create语句中定义的约束吗?

CREATE TABLE alert_template
(
        id INT PRIMARY KEY IDENTITY,
        object_type_id TINYINT NOT NULL REFERENCES object_type(id)
                CONSTRAINT u_alert_template_object_type
                CHECK (object_type_id = 5 or object_type_id = 17 or object_type_id =  18 or object_type_id = 26 or object_type_id = 27),
        object_id BIGINT NULL,
        alert_object_type_id TINYINT NOT NULL REFERENCES object_type(id)
                CONSTRAINT u_alert_template_alert_object_type
                CHECK (alert_object_type_id = 5 or alert_object_type_id = 37 or alert_object_type_id = 38),
        alert_object_id TINYINT NOT NULL,
        name NVARCHAR(128) NOT NULL
                CONSTRAINT u_alert_template_name UNIQUE (object_type_id, object_id, name),
        monitor_type_bit_flags INT NOT NULL
                CONSTRAINT u_alert_template_object_association UNIQUE (object_type_id, object_id, alert_object_type_id, alert_object_id, monitor_type_bit_flags),
);

enter image description here

1 个答案:

答案 0 :(得分:1)

此错误通知您正在尝试将重复值输入到已定义唯一索引/键的列中。

据我所知,SQL管理工作室不会为您创建这些,您必须自己创建它们,但是,它确实可以为您创建一个名称,通常采用IX_xxxxx格式

看看这篇文章,它引导您使用SQL管理工作室创建索引,您应该能够使用相同的过程来查看分配给相关表的任何索引/键,并设置您理解的路径为什么插入失败。

Add unique constraint in SQL SQL Server 2008 GUI?

希望这有帮助!