Зарезервировать диапазон значений в таблице на SQL сервере - PullRequest
1 голос
/ 04 августа 2020

Я хочу зарезервировать для системы диапазон значений, например [1-10,000]. Пользовательские значения должны быть вставлены после 10 000. например. Существует таблица, в которую будут вставлены значения системой, а также значения, вставленные пользователем. Итак, когда система вставляет, присвоенный ей идентификатор должен быть от 1 до 10 000. Если пользователь вставляет значение, оно может быть больше 10 000.

1 Ответ

2 голосов
/ 04 августа 2020

Вы можете использовать проверить ограничение , чтобы убедиться, что условие выполнено:

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);

Если столбец должен заполняться автоматически, вы можете использовать IDENTITY column вот так:

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_INSERT , чтобы добавить свои специальные записи.

Если вам нужно больше контроля, вы можете использовать триггер - вместо / после INSERT и UPDATE. Вы можете добавить туда больше logi c - отклонить ввод пользователя или преобразовать ввод пользователя. Но это кажется излишним, и вам нужно быть осторожным при создании триггеров - всегда обрабатывайте строки партиями, чтобы не сильно влиять на производительность CRUD.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...