Вы также можете обрабатывать при вставке данных, например:
insert into table1(ID,TenantId,PaymentId)
select 6,2,isnull(max(PaymentId)+1,1)
from table1 where TenantId=2
group by TenantId
Если вы хотите использовать триггер, это образец, в тыс образце, даже указать PaymentID при вставке данных, этот триггер также перерасчета PaymentID
DROP TABLE table1
CREATE TABLE Table1(ID INT IDENTITY(1,1),TenantId INT ,PaymentId INT)
CREATE TRIGGER trg_UpdatePaymentId
ON dbo.TABLE1
AFTER INSERT
AS
BEGIN
SET NOCOUNT ON;
UPDATE t SET t.PaymentId=a.rn
FROM dbo.TABLE1 AS t INNER JOIN (
SELECT i.ID,(ISNULL(c.MaxPaymentId,0)+ ROW_NUMBER()OVER(PARTITION BY TenantId ORDER BY ID)) AS rn FROM Inserted AS i
OUTER APPLY(
SELECT MAX(tt.PaymentId) AS MaxPaymentId FROM Table1 AS tt WHERE tt.TenantId=i.TenantId AND NOT EXISTS(SELECT 0 FROM Inserted AS ii WHERE ii.ID=tt.ID)
) AS c
) AS a ON a.ID=t.ID
END
GO
INSERT INTO table1(TenantId)VALUES(1),(2),(1),(1)
SELECT * FROM dbo.TABLE1
ID TenantId PaymentId
----------- ----------- -----------
1 1 1
2 2 1
3 1 2
4 1 3
Используйте 'ROW_NUMBER() OVER (PARTITION BY TenantID ORDER BY ID ASC)' –
@ M.Ali это для некоторых запросов и представлений в порядке? Я хочу добавить столбец в таблицу. – PAVITRA
Любопытно, почему вы не можете использовать Max? Когда вы вставляете свою запись PaymentId = (SELECT Max (PaymentId) + 1 FROM Table WHERE TenantId = @tenantId). Кроме того, в качестве небольшой рекомендации, если PaymentId не присоединяется к другой таблице, я бы просто назвал ее PaymentNumber (идентификатор подразумевает первичный ключ к другой таблице). – BlackjacketMack