SQL Server 저장 프로 시저를 사용하여 임시 테이블에서 레코드를 몇 개 삽입하려고합니다. 임시 테이블에는 백분율 열과 PQ 번호 열이 있습니다. 테이블에서 동일한 PQ 번호를 가진 행이 두 개 이상있을 수 있습니다. 그러나 삽입이 일어나기 위해서는 같은 PQ 번호에 대한 백분율의 합이 100 %가되어야합니다. 이 상황에 대한 where 절을 쓸 수 없습니다.일부 조건을 기반으로 레코드 삽입
CREATE PROCEDURE [dbo].[Upsert_DebitSheet]
@filename VARCHAR(250)
AS
BEGIN
SET XACT_ABORT ON
RETRY: -- Label RETRY
BEGIN TRANSACTION
BEGIN TRY
SET NOCOUNT ON;
INSERT INTO [dbo].[DebitSheet]([Date], [RMMName], [Invoice],[PQNumber], [CAF],
[Percentage], [Amount], [FileName])
SELECT
*, @filename
FROM
(SELECT
[Date], [RMMName], [Invoice], [PQNumber], [CAF],
[Percentage], [Amount]
FROM
[dbo].[TempDebitSheet]
WHERE) result
SELECT @@ROWCOUNT
TRUNCATE TABLE [dbo].[TempDebitSheet]
COMMIT TRANSACTION
END TRY
BEGIN CATCH
PRINT ERROR_MESSAGE()
ROLLBACK TRANSACTION
IF ERROR_NUMBER() = 1205 -- Deadlock Error Number
BEGIN
WAITFOR DELAY '00:00:00.05' -- Wait for 5 ms
GOTO RETRY -- Go to Label RETRY
END
END CATCH
SET ROWCOUNT 0;
END
MainTable(Expected Result)이 이 ... 선택 결과에 삽입처럼 당신은 WHERE
INSERT INTO [dbo].[DebitSheet]
([Date]
,[RMMName]
,[Invoice]
,[PQNumber]
,[CAF]
,[Percentage]
,[Amount]
,[FileName])
SELECT [Date]
,[RMMName]
,[Invoice]
,[PQNumber]
,[CAF]
,[Percentage]
,[Amount]
FROM [dbo].[TempDebitSheet]
WHERE EXISTS (
SELECT tmp.[PQNumber]
FROM [dbo].[TempDebitSheet] tmp
WHERE tmp.[PQNumber] = [TempDebitSheet].[PQNumber]
GROUP BY tmp.[PQNumber]
HAVING SUM(tmp.[Percentage]) = 100
)
일부 샘플 데이터 및 예상 결과 표시 – TheGameiswar
@TheGameiswar 샘플 데이터를 추가했습니다. –