对于你们中的一些人来说,这可能是一个简单的查询。但是我在Sql中并不强大,所以期待解决我的问题。
我有2个表,ProductVenueImport
和SupplierVenueImport
。
我们正在使用 MERGE 子句和SupplierVenueImport
表将所有记录从ProductVenueImport
转储到Temp
。 Temp
将包含来自SupplerVenuImport
和Temp
表的有效记录,我们将记录导入ProductVenueImport
。
但在将数据从ProductVenueImport
表导入Temp
之前,我需要检查目标中的重复记录(ProductVenueImport
)。
例如,如果我要导入名称为“A”的记录,我需要查看ProductVenueImport
是否已存在“A”。如果它不存在那么我只需要插入“A”,否则不会。
有人能告诉我怎么做吗?
仅使用游标选项吗?
谢谢, 纳雷什
答案 0 :(得分:1)
假设Temp
表本身没有重复项,您可以像这样使用MERGE:
插入不存在的产品。
如果是现有产品,请执行NO-OP。
在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
;
答案 1 :(得分: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)
答案 2 :(得分:0)
这应该允许您检查表中的重复项
从tablename中选择columnname 按列名分组 有计数(列名)> 1
答案 3 :(得分:0)
对不起,如果我没有得到正确的问题,你不能使用源表上的合并语句“当不匹配插入”单独插入新记录时
所以在你的情况下它应该是这样的
merge into ProductVenueImport using temp on (<condition for duplicate>)
when not matched then insert <clause>;
merge子句将确保没有重复的记录插入到源表中。