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>);