Sie können auch verarbeiten, wenn Daten einfügen, zum Beispiel:
insert into table1(ID,TenantId,PaymentId)
select 6,2,isnull(max(PaymentId)+1,1)
from table1 where TenantId=2
group by TenantId
Wenn Sie Trigger verwenden möchten, Dies ist ein Beispiel, an der THS Probe, Sie sogar eine PaymentId angeben, wenn auch Daten, diesen Trigger Einfügen die 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
Verwenden 'ROW_NUMBER() OVER (PARTITION BY TenantID ORDER BY ID ASC)' –
@ M.Ali ist dies für SELECT-Abfragen oder Ansichten neu zu berechnen oder? Ich möchte die Spalte zur Tabelle hinzufügen. – PAVITRA
Neugierig, warum Sie Max nicht benutzen können? Wenn Sie Ihren Datensatz einfügen, wird PaymentId = (SELECT Max (PaymentId) + 1 FROM-Tabelle WHERE TenantId = @tenantId). Auch, als eine kleine Empfehlung, wenn PaymentId nicht zu einer anderen Tabelle beitreten würde ich es einfach PaymentNumber nennen (ID impliziert einen Primärschlüssel zu einer anderen Tabelle). – BlackjacketMack