SQL Server를 사용하고 있으며 임차인 ID를 참조하여 계정 번호를 유지해야합니다.세입자 ID를 고려한 자동 증분
순차적으로 증가하고 클라이언트 응용 프로그램에 간격이 있기 때문에 자동 증가 ID를 사용할 수 없습니다. Max
같은 집계 함수는이를위한 가장 좋은 방법이 될 것입니다 무엇
나는 계산 열을 사용하지 수 있을까?
SQL Server를 사용하고 있으며 임차인 ID를 참조하여 계정 번호를 유지해야합니다.세입자 ID를 고려한 자동 증분
순차적으로 증가하고 클라이언트 응용 프로그램에 간격이 있기 때문에 자동 증가 ID를 사용할 수 없습니다. Max
같은 집계 함수는이를위한 가장 좋은 방법이 될 것입니다 무엇
나는 계산 열을 사용하지 수 있을까?
또한 처리 할 수있는 경우 예를 들어 삽입 데이터 :
insert into table1(ID,TenantId,PaymentId)
select 6,2,isnull(max(PaymentId)+1,1)
from table1 where TenantId=2
group by TenantId
당신이 트리거를 사용하려면,이 샘플 데이터를 삽입 할 때, 심지어 당신은 또한이 트리거를 PaymentId를 지정, THS 샘플에서입니다 (TenantID ORDER BY ID의 ASC에 의해 PARTITION)이 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
.Net 엔터티 프레임 워크를 사용하여 데이터를 추가 할 때 테이블 수준에서 수정이 필요합니다. – PAVITRA
@PAVITRA 방아쇠 견본을드립니다. –
사용'ROW_NUMBER()가 OVER를 다시 계산하는'M.Ali @ –
이 선택 쿼리 또는 뷰에 대한 권리? 테이블에 열을 추가하려고합니다. – PAVITRA
왜 Max를 사용할 수 없습니까? 레코드를 삽입 할 때 PaymentId = (SELECT Max (PaymentId) + 1 FROM Table WHERE TenantId = @tenantId). 또한 약간의 권장 사항으로 PaymentId가 다른 테이블에 가입하지 않으면 단순히 PaymentNumber (Id는 다른 테이블의 기본 키를 의미)라고합니다. – BlackjacketMack