【问题标题】:SQL indexes How to ensure insert of valueSQL 索引 如何保证值的插入
【发布时间】:2021-09-16 23:05:03
【问题描述】:

如果我有以下索引:

CREATE UNIQUE NONCLUSTERED INDEX IX_Contacts ON Contacts (User_ID) WHERE (IsDefault=1)

确保设置了IsDefault

如何同时确保/要求始终设置IsDefault

你能做这样的事情吗?

CREATE UNIQUE NONCLUSTERED INDEX IX_Contacts ON Contacts (User_ID) WHERE (IsDefault>1)

【问题讨论】:

  • 你能设置联系人行的默认值吗?
  • 总是设置“IsDefault'”是什么意思?“允许”数据和“不允许”数据的示例会澄清。
  • 确保用于插入或更新语句的值“正确”是应用程序和使用它的人的事情。数据库引擎无法控制——它只能防止“坏”数据存储在表中。在这里,您似乎想要一个过滤的唯一索引来防止每个 User_ID 出现多个“默认”行。请注意,这并不要求每个用户都有一个默认值 - 仅存在一个默认值最多。您混淆了相关但独立的问题。

标签: sql sql-server tsql database-indexes


【解决方案1】:

确保IsDefault 列不允许 NULL 并创建具有所需默认值的默认约束,当在 INSERT 语句中未明确指定该列时将使用该默认值。

示例 DDL,猜测列数据类型和所需的默认值:

ALTER TABLE dbo.Contacts
    ALTER COLUMN IsDefault bit NOT NULL;
ALTER TABLE dbo.Contacts
    ADD CONSTRAINT DF_Contacts_IsDefault DEFAULT (1) FOR IsDefault;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-03-31
    相关资源
    最近更新 更多