0

对你们中的一些人来说,这可能是一个简单的问题。但我在 Sql 方面并不强,所以期待我的问题的一些解决方案。

我有 2 张桌子,ProductVenueImport并且SupplierVenueImport.

我们将所有记录从SupplierVenueImport使用ProductVenueImportMERGE子句和一个Temp表转储。Temp将有来自SupplerVenuImport和来自Temp我们将记录导入到的表中的有效记录ProductVenueImport

ProductVenueImport但在从表中导入数据之前,Temp我需要检查目标 ( ProductVenueImport) 中的重复记录。

例如,如果我要导入名称为“A”的记录,我需要查看ProductVenueImport“A”是否已经存在。如果它不存在,那么我只需要插入“A”,否则不需要。

有人可以告诉我该怎么做吗?

仅使用光标是一种选择吗?

谢谢,纳雷什

4

4 回答 4

1

假设Temp表本身没有重复项,您可以像这样使用 MERGE:

  1. 插入不存在的产品。

  2. 在现有产品的情况下执行 NO-OP。

  3. 在 OUTPUT 子句中使用$action来标记哪些行被考虑插入(和插入)以及哪些行需要更新(但没有真正更新)。

这就是我的意思:

DECLARE @noop int;  -- needed for the NO-OP below

MERGE INTO ProductVenueImport AS tgt
USING Temp AS src
ON src.ProductID = tgt.ProdutID
WHEN NOT MATCHED THEN
  INSERT (    column1,     column2, ...)
  VALUES (src.column1, src.column2, ...)
WHEN MATCHED THEN
  UPDATE SET @noop = @noop  -- the NO-OP instead of update
OUTPUT $action, src.column1, src.column2, ...
  INTO anotherTempTable
;
于 2013-06-17T05:39:51.457 回答
0

我认为这会这样做:

INSERT INTO PRODUCTTBL(FEILD1, FIELD2, FIELD3, FIELD4, FIELD5)
SELECT (FIELD1,FIELD2,FIELD3,FIELD4,FIELD5) FROM TEMP WHERE CRITERIAFIELD NOT IN(SELECT     DISTINCT CRITERIAFIELD FROM PRODUCTTBL)
于 2013-06-17T05:05:51.723 回答
0

这应该允许您检查表中的重复项

按计数(列名)> 1的列名从表名组中选择列名

于 2013-06-17T05:14:37.283 回答
0

抱歉,如果我没有正确回答问题,您不能使用源表上的合并语句和“当不匹配时插入”来单独插入新记录

所以在你的情况下应该是这样的

merge into ProductVenueImport using temp on (<condition for duplicate>)
when not matched then insert <clause>;

合并子句将确保没有重复记录插入到源表中。

于 2013-06-17T05:34:25.353 回答