0

SQL Serverストアドプロシージャを使用して一時テーブルからレコードを挿入しようとしています。一時テーブルには、パーセンテージ列とPQ番号列があります。テーブル内には、同じPQ番号を持つ行が2つ以上存在することがあります。しかし挿入が起こるためには、同じ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)

+0

はいくつかのサンプルデータと期待される結果を示します – TheGameiswar

+0

@ TheGameiswarサンプルデータを追加しました –

答えて

2

あなたは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

でサブクエリを使用することができ、この ようなあなたのクエリを変更 選択結果...に挿入します。*、@filenameから(....)結果