Sql 如何在不复制我创建的表中的记录的情况下反复插入?

Sql 如何在不复制我创建的表中的记录的情况下反复插入?,sql,sql-server,Sql,Sql Server,这是我创建的表: use DWResourceTask go IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[TESTDimEntity]') AND type in (N'U')) DROP TABLE [TESTDimEntity] Go Create Table TESTDimEntity (EntityKey int NOT NULL identity PRIMARY KEY, [EntCode]

这是我创建的表:

use DWResourceTask
go
IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'[TESTDimEntity]') AND type in (N'U'))
DROP TABLE [TESTDimEntity]
Go
Create Table TESTDimEntity

(EntityKey int NOT NULL identity PRIMARY KEY,
[EntCode] [nvarchar](8) NOT NULL,
    [Name] [nvarchar](80) NOT NULL,
    [CompanyRegistration] [nvarchar](80) NULL,
    [Active] [int] NOT NULL,
    [AccessLevel] [int] NOT NULL ,
    [SiteURN] [nvarchar](128) NOT NULL,
    [CompanyURN] [nvarchar](128) NOT NULL,
    [SiteName] [nvarchar](30) NOT NULL,
    [SiteDesc] [nvarchar](60) NULL,
    [SiteURL] [nvarchar](512) NOT NULL)
我使用下面的脚本插入了数据:

Insert into DWResourceTask.dbo.TESTDimEntity
Select e.EntCode, e.Name, CompanyRegistration, e.Active, e.AccessLevel, ss.SiteURN, ss.CompanyURN,
ss.SiteName, ss.SiteDesc, ss.SiteURL
from USA.dbo.Site ss, USA.dbo.LegalEnt e
where ss.localsiteflag = 1
and e.active = 1
UNION ALL
Select e.EntCode, e.Name, CompanyRegistration, e.Active, e.AccessLevel, ss.SiteURN, ss.CompanyURN,
ss.SiteName, ss.SiteDesc, ss.SiteURL
from UK.dbo.Site ss, UK.dbo.LegalEnt e
where ss.localsiteflag = 1
and e.active = 1
这个脚本生成了这3行,每列都有自己的数据

我的问题是

如果我想反复运行Insert into脚本,它不追加或复制数据,但只更新,只插入新记录或/和更新现有记录,该怎么办

是否有任何脚本不会插入当前维度表中已经存在的数据

非常感谢

使用

您的语句存在一些问题,缺少的JOIN子句是最明显的问题。您应该有一个索引来强制执行任何预期的唯一性

可能重复的
WITH c as (
 SELECT ...
   FROM USA.dbo.Site ss 
   JOIN USA.dbo.LegalEnt e
     ON <somejoincondition here!>
   WHERE ss.localsiteflag = 1
      and e.active = 1
 UNION ALL ...)
MERGE INTO TESTDimEntity as t
 USING c
 ON (t.EntCode = c.EntCode)
WHEN MATCHED THEN UPDATE 
 SET t.<field> = c.<field>
WHEN NOT MATCHED THEN INSERT (t.<fields>)
  VALUES (c.<fields>);