在sql server的表中保留一个值范围

avwztpqn  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(300)

我想为系统保留一系列值,比如[1-10000]。用户值应在10000之后插入。有一个表,它的值将由系统插入,也将由用户插入。因此,当系统插入时,分配给它的id必须在1到10000之间。如果用户插入一个值,则该值可以是大于10000的任何值。

jvidinwx

jvidinwx1#

可以使用“检查约束”来确保满足条件:

DROP TABLE IF EXISTS [dbo].[StackOverflow];

CREATE TABLE [dbo].[StackOverflow]
(
    [Col01] INT
   ,CONSTRAINT [CH_StackOverflow] CHECK ([Col01] < 1 OR [Col01] > 10000)
);

INSERT INTO [dbo].[StackOverflow] ([Col01])
VALUES (-1);

INSERT INTO [dbo].[StackOverflow] ([Col01])
VALUES (1);

如果必须自动填充列,则可以使用如下标识列:

DROP TABLE IF EXISTS [dbo].[StackOverflow];

CREATE TABLE [dbo].[StackOverflow]
(
    [Col01] INT IDENTITY(10001, 1)
   ,[Col02] NVARCHAR(12)
);

INSERT INTO [dbo].[StackOverflow] ([Col02])
VALUES ('x');

INSERT INTO [dbo].[StackOverflow] ([Col02])
VALUES ('y');

SELECT *
FROM [dbo].[StackOverflow];

最近,您可以使用set identity\u insert添加特殊记录。
如果需要更多的控制,可以使用trigger-而不是/after insert和update。您可以添加更多的逻辑-拒绝用户输入或转换用户输入。但这感觉像是一种过度杀戮,在创建触发器时需要小心——总是成批处理行,以确保不会对crud性能造成太大影响。

相关问题