MS SQL: ограничение на добавление новых записей по количеству

Имеется таблица примерно следующего содержания:

CREATE TABLE [dbo].[oti_athena] (
    [id]                INT            IDENTITY (1, 1) NOT NULL,
    [subdivision]       NVARCHAR (MAX) NULL,
    [ekz_date]          DATE           NULL,
    [personal_name]     NVARCHAR (MAX) NULL,
    [personal_position] NVARCHAR (MAX) NULL,
    [ekz_object]        NVARCHAR (MAX) NULL,
    [ekz_type]          NVARCHAR (MAX) NULL,
    [ekz_level]         NVARCHAR (MAX) NULL,
    [ekz_chief]         NVARCHAR (MAX) NULL,
    [ekz_time]          TIME (7)       NULL,
    [application_date]  DATE           NULL,
    [instruction] NVARCHAR(MAX) NULL, 
    CONSTRAINT [PK_oti_athena_id] PRIMARY KEY CLUSTERED ([id] ASC)
);

Если в таблице уже есть 5 записей с одинаковой датой в поле [ekz_date], каким образом можно ограничить (запретить) добавление новой шестой записи c той же датой? И вывести сообщение об ограничении?


Ответы (1 шт):

Автор решения: Alexander Petrov

Это может выглядеть примерно так.

create trigger check_insert
on [dbo].[oti_athena]
after insert
as
begin
    declare @count int

    set nocount on

    set @count = (select count(o.[ekz_date])
                  from [dbo].[oti_athena] o
                  join inserted i
                  on o.[ekz_date] = i.[ekz_date]);

    if @count > 5
        throw 50000, 'Check Failed', 1;
end

Считаем количество значений, равных вставляемому. Если оно превышает заданное, бросаем исключение, как предложил @nick_n_a.

→ Ссылка