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.