2013-02-09 74 views
1

我正在使用SQL Server管理工具2008将数据导入到Web主机数据库。我有主键的表。 (每行的ID)现在我可以正常导入数据。但是,当我第二次导入数据时......我需要确保只有那些当前不存在的行才会被插入。如果有一个使用向导来做到这一点?如果不是,那么最佳做法是什么?SQL导入数据 - 仅在不存在时插入

+3

我将其加载到一个临时表并做一个'INSERT ... SELECT ... WHERE NOT EXISTS ...'或'MERGE' – Kermit 2013-02-09 19:49:31

+1

@KDB。 。 。了解'MERGE'声明。它做到了这一点以及更多。 – 2013-02-09 19:51:54

回答

0

我用这个前一段时间,也许它可以帮助:

insert into timestudio.dbo.seccoes (Seccao,Descricao,IdRegiao,IdEmpresa) 
    select distinct CCT_COD_CENTRO_CUSTO, CCT_DESIGNACAO, '9', '10' from rhxxi.dbo.RH_CCTT0 
    where CCT_COD_CENTRO_CUSTO not in (select Seccao from TimeStudio.dbo.Seccoes where idempresa = '10') 

或者,只用简单的一个IF语句。

+1

我的经验是,不存在的是更快,更可靠的不存在。 – 2013-02-09 21:08:09

+0

几乎总是'不存在'比其他选项更好,[男人已经测试了它](http://www.sqlperformance.com/2012/12/T-SQL查询/左防半联接)。 – 2013-02-09 22:49:00

+0

thnks。我会尝试 – dnisml 2013-02-10 00:35:57

1
  1. 将数据插入到一个临时表
  2. 使用留下了主表连接,以确定哪些记录插入

-

CREATE TABLE T1(col1 int) 
go 

CREATE TABLE Temp(col1 int) 
go 

INSERT INTO T1 
SELECT 1 
UNION 
SELECT 2 

INSERT INTO TEMP 
SELECT 1 
UNION 
SELECT 2 
UNION 
SELECT 3 
UNION 
SELECT 4 

INSERT INTO T1 
SELECT TEMP.col1 
FROM Temp 
LEFT JOIN T1 
    ON TEMP.col1 = T1.col1 
WHERE T1.col1 IS NULL