Следующий код является предметом моих обычных обязательств "Я только что проснулся":
Одиночная вставка
INSERT INTO Tasks
(ProjectID,Name,GroupedIndexField)
SELECT @ProjectID
, 'Do Some Work'
, ( SELECT ISNULL(MAX(GroupedIndexField), 0)
FROM Tasks
WHERE ProjectID = @ProjectID ) + 1
Многократная вставка
INSERT INTO Tasks
(ProjectID,Name,GroupedIndexField)
SELECT tblTasksToInsert.ProjectID
, tblTasksToInsert.Name
, ( SELECT ISNULL(MAX(GroupedIndexField), 0)
FROM Tasks
WHERE ProjectID = tblTasksToInsert.ProjectID ) + ROW_NUMBER() OVER (PARTITION BY tblTasksToInsert.ProjectID ORDER BY InsertionOrder)
FROM tblTasksToInsert
Создать представление
Создать представление с помощью следующего запроса:
SELECT TaskID
, ProjectID
, ROW_NUMBER() OVER (PARTITION BY ProjectID ORDER BY TaskID ) AS GroupedIndexValue
FROM Tasks
SQL Server Denali
SQL Server Denali позволяет создавать последовательности. Вы можете иметь несколько последовательностей на проект, хотя это не совсем правильный способ их использования.