0

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 

Temporary Table

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  
) 
+0

일부 샘플 데이터 및 예상 결과 표시 – TheGameiswar

+0

@TheGameiswar 샘플 데이터를 추가했습니다. –

답변

2

. *, @filename을 에서 (....) 결과

0

에 쿼리를 하위 쿼리를 수정하여 사용할 수 있습니다

관련 문제