Sql server 如何使用sql中的值列表更新和插入

Sql server 如何使用sql中的值列表更新和插入,sql-server,tsql,sql-update,sql-insert,Sql Server,Tsql,Sql Update,Sql Insert,我从select查询中获得一个值列表。从列表中,我检查列表中的项目是否在表中可用。如果这些值存在,我需要更新这些值,否则将列表插入表中 通过该列表,我可以在表中插入值列表。 如何在sql中检查和更新列表 我的问题是: WITH pq AS ( SELECT A.[ProductId] ,A.[Quantity],A.[OrderId],D.[ProductName],E.[SpecialPrice],E.[SpecialPrice]*A.[Quantity] AS SPrice

我从select查询中获得一个值列表。从列表中,我检查列表中的项目是否在表中可用。如果这些值存在,我需要更新这些值,否则将列表插入表中

通过该列表,我可以在表中插入值列表。 如何在sql中检查和更新列表

我的问题是:

 WITH pq AS
    (
    SELECT A.[ProductId] ,A.[Quantity],A.[OrderId],D.[ProductName],E.[SpecialPrice],E.[SpecialPrice]*A.[Quantity] AS SPrice FROM [Table1]  A
    LEFT JOIN [Table2]  B ON A.[OrderId] = B.[OrderId] INNER JOIN [Table3]  D
    ON A.[ProductId] = D.[ProductId] INNER JOIN [Table4] E
    ON A.[ProductId] = E.[ProductId] WHERE B.[CustomerId] = 1       
    AND A.[OrderId] = 77 
    )
    IF (EXISTS(SELECT [ProductId] FROM [Table5] WHERE [ProductId] = A.[ProductId]))
    BEGIN
    UPDATE [Table5]
    SET [Quantity] = A.[Quantity]
    WHERE B.[CustomerId] = 1 AND [ProductId] = A.[ProductId]
    END
    ELSE
    BEGIN
    INSERT INTO [Table5]
    ([ProductId],[ProductName],[Quantity],[Price],[TotalAmount])
    SELECT
    [ProductId],[ProductName],[Quantity],[SpecialPrice],SPrice
    FROM pq;
    END
任何建议都会大有帮助

编辑:选择查询结果

ProductId Quantity

   65       2

   64       1

假设您使用的是SQL Server 2008或更高版本,该语句将解决您的问题:

MERGE Table5 TRG
USING (
    SELECT
        A.ProductId,
        A.Quantity,
        A.OrderId,
        D.ProductName,
        E.SpecialPrice,
        (E.SpecialPrice * A.Quantity) SPrice
    FROM Table1 A
        LEFT JOIN Table2 B ON A.OrderId = B.OrderId
        INNER JOIN Table3 D ON A.ProductId = D.ProductId
        INNER JOIN Table4 E ON A.ProductId = E.ProductId
    WHERE
        B.CustomerId = 1       
        AND A.OrderId = 77 
) SRC
ON TRG.ProductID = SRC.ProductID
WHEN MATCHED THEN
    UPDATE SET TRG.Quantity = SRC.Quantity
WHEN NOT MATCHED BY TARGET THEN
    INSERT (
        ProductId
        , ProductName
        , Quantity
        , Price
        , TotalAmount
    )
    VALUES (
        SRC.ProductId
        , SRC.ProductName
        , SRC.Quantity
        , SRC.SpecialPrice
        , SRC.SPrice)
;
您可以将SELECT查询移动到一个可识别的位置,就像您在示例中所做的那样