首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >SQL Server:如何将表约束为只包含一行?

SQL Server:如何将表约束为只包含一行?
EN

Stack Overflow用户
提问于 2010-10-19 18:25:26
回答 11查看 29.2K关注 0票数 89

我想在我的应用程序的配置表中存储一行。我想强制这个表只能包含一行。

实施单行约束的最简单方法是什么?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2010-10-19 18:36:22

确保其中一列只能包含一个值,然后将其设置为主键(或应用唯一性约束)。

代码语言:javascript
复制
CREATE TABLE T1(
    Lock char(1) not null,
    /* Other columns */,
    constraint PK_T1 PRIMARY KEY (Lock),
    constraint CK_T1_Locked CHECK (Lock='X')
)

我在不同的数据库中有许多这样的表,主要用于存储配置。知道如果配置项应该是一个int,那么您将只能从DB中读取int,这要好得多。

票数 114
EN

Stack Overflow用户

发布于 2010-10-20 02:54:51

我通常使用达米恩的方法,这对我来说一直很有效,但我还补充了一件事:

代码语言:javascript
复制
CREATE TABLE T1(
    Lock char(1) not null DEFAULT 'X',
    /* Other columns */,
    constraint PK_T1 PRIMARY KEY (Lock),
    constraint CK_T1_Locked CHECK (Lock='X')
)

添加“默认的'X'",您将永远不需要处理Lock列,也不需要在第一次装入表时记住哪个是锁值。

票数 61
EN

Stack Overflow用户

发布于 2010-10-19 18:35:20

你可能想重新考虑这个策略。在类似的情况下,我经常发现留下旧的配置行作为历史信息是非常有价值的。

为此,您实际上有一个额外的列creation_date_time (插入或更新的日期/时间)和一个insert或insert/update触发器,它将用当前日期/时间正确地填充它。

然后,为了获得当前的配置,您可以使用如下命令:

代码语言:javascript
复制
select * from config_table order by creation_date_time desc fetch first row only

(取决于您的DBMS风格)。

这样,您仍然可以出于恢复目的维护历史记录(如果表太大,您可以设置清理过程,但这不太可能),并且您仍然可以使用最新的配置。

票数 17
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3967372

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档