【发布时间】:2014-02-11 17:35:43
【问题描述】:
所有, 我绞尽脑汁想找出解决这个问题的最佳方法。本质上,我想比较两个表并在满足某些条件时插入现有记录的副本 - 例如,如果名为“OrderComplete”的列是“是”或者该记录当前不存在于插入表中。我一直在寻找使用 IF 语句或 CASE,但我被 IF 部分困住了——下面是我想运行的两个查询,但是编写 IF 语句需要花很多时间。有什么想法或想法吗?
下面的两个查询都运行良好,但我需要一个条件来查找重复项,并且仅在插入表的项目“OrderComplete”设置为yes 时才进行复制。我可以放一个简单的方程式,但想在 IF 区域插入一个 SELECT 或更复杂的东西。也许你不能比较 IF 语句中的两个表,现在只是难住了。
IF ?????
BEGIN
use [PaperDB]
INSERT INTO dbo.ORDERED_PARTS_TABLE
([OrderPN]
,[OldPN]
,[OldPN2]
,[PartDescription]
,[WhereUsed]
,[LocationStored]
,[LocationDescription]
,[AlternateLocationStored]
,[AlternateLocationDescription]
,[QuantityOnHand]
,[ReorderQuantity]
,[QuantityToOrder]
,[Category]
,[LastUpdated]
,[spare]
,[spare2]
,[spare3])
SELECT s.orderpn, s.oldpn, s.oldpn2, s.partdescription, s.whereused, s.locationstored,
s.locationdescription, s.alternatelocationstored, s.alternatelocationdescription,
s.quantityonhand, s.reorderquantity, s.reorderquantity - s.QuantityOnHand , s.category,
s.lastupdated, s.QuantityOnHand , s.ReorderQuantity , s.Spare3
FROM dbo.PARTS_ORDER_TABLE as s
LEFT OUTER JOIN
ORDERED_PARTS_TABLE as t
on s.OrderPN = t.OrderPN
WHERE (NOT EXISTS (SELECT *
from ORDERED_PARTS_TABLE
where s.OrderPN = t.OrderPN))
END
ELSE
BEGIN
use [PaperDB]
INSERT INTO dbo.ORDERED_PARTS_TABLE
([OrderPN]
,[OldPN]
,[OldPN2]
,[PartDescription]
,[WhereUsed]
,[LocationStored]
,[LocationDescription]
,[AlternateLocationStored]
,[AlternateLocationDescription]
,[QuantityOnHand]
,[ReorderQuantity]
,[QuantityToOrder]
,[Category]
,[LastUpdated]
,[spare]
,[spare2]
,[spare3])
SELECT s.orderpn, s.oldpn, s.oldpn2, s.partdescription, s.whereused, s.locationstored,
s.locationdescription, s.alternatelocationstored, s.alternatelocationdescription,
s.quantityonhand, s.reorderquantity, s.reorderquantity - s.QuantityOnHand , s.category,
s.lastupdated, s.QuantityOnHand , s.ReorderQuantity , s.Spare3
FROM dbo.PARTS_ORDER_TABLE as s
LEFT OUTER JOIN
ORDERED_PARTS_TABLE as t
on s.OrderPN = t.OrderPN
WHERE s.OrderPN = t.OrderPN AND t.OrderComplete = 'yes'
END
【问题讨论】:
-
我添加了 sql-server 标签,因为语法看起来像 SQL Server。
-
一方面,将
use语句移到if之前。他们两个。 -
如果您使用的是 SQL Server,您能遵守吗?如果是,那是什么版本?
-
我相信您正在寻找
MERGE声明? msdn.microsoft.com/en-us/library/bb510625.aspx -
感谢大家的建议 - 非常有帮助。我将尝试 Merge 命令并从那里开始。
标签: sql sql-server if-statement case