Sql server 如何使用sql中的值列表更新和插入
我从select查询中获得一个值列表。从列表中,我检查列表中的项目是否在表中可用。如果这些值存在,我需要更新这些值,否则将列表插入表中 通过该列表,我可以在表中插入值列表。 如何在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
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查询移动到一个可识别的位置,就像您在示例中所做的那样