繁体   English   中英

根据某些条件插入记录

[英]Insertion of records based on some condition

我正在尝试使用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(预期结果)

您可以在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       
)

像这样修改查询插入到...选择结果。*,@文件名来自(....)结果

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM