Mayhaps это будет делать:
declare @UserProject as Table
(UserProjectId Int Identity, UserId Int, UserProjectName VarChar(32), UserProjectNumber Int);
insert into @UserProject (UserId, UserProjectName, UserProjectNumber) values
(2, 'Test', (select IsNull(Max(UserProjectNumber), 0) + 1 from @UserProject where UserId = 2));
insert into @UserProject (UserId, UserProjectName, UserProjectNumber) values
(2, 'Alpha', (select IsNull(Max(UserProjectNumber), 0) + 1 from @UserProject where UserId = 2));
insert into @UserProject (UserId, UserProjectName, UserProjectNumber) values
(1, 'Aleph', (select IsNull(Max(UserProjectNumber), 0) + 1 from @UserProject where UserId = 1));
insert into @UserProject (UserId, UserProjectName, UserProjectNumber) values
(2, 'Beta', (select IsNull(Max(UserProjectNumber), 0) + 1 from @UserProject where UserId = 2));
insert into @UserProject (UserId, UserProjectName, UserProjectNumber) values
(1, 'Beth', (select IsNull(Max(UserProjectNumber), 0) + 1 from @UserProject where UserId = 1));
select *
from @UserProject
order by UserId, UserProjectNumber;
Обслуживание UserProjectNumber
колонны становится проблематичным, когда пользователи могут удалять проекты. Должны ли цифры оставаться плотными? Должны ли новые проекты повторно использовать старые номера?
Если цель добавления UserProjectNumber
предназначена исключительно для отображения, то, вероятно, имеет смысл либо генерировать число на лету, используя Row_Number() over (partition by UserId order by UserProjectName)
, либо оставить его в приложении.
Если цель состоит в том, чтобы обеспечить ограничение по шести проектам на пользователя, тогда ограничение, использующее Count()
, или триггер, может быть лучшим выбором.
Есть ли причина, по которой использование столбца 'IDENTITY' является неприемлемым? – HABO
@HABO - Все еще дает ту же ошибку, что и вставка значения NULL. Столбец Identity - это PK для этой таблицы. Пользователь может иметь только 6 проектов - номер 1 - номер 6 - идентификационный номер не будет жизнеспособным по этому случаю, как это могло бы быть в миллионах. – James