2012-03-28 132 views
1

我有一个包含主键kha_ID的大表(访问)。该表中有十几列,我只想替换它们中的一个,即ADM_SRC。问题是ADM_SRC包含空值。我用kha_id和该记录的相应ADM_SRC导入了另一个表。我希望下面的查询将正确的ADM_SRC插入正确的记录。将两列复制到另一个表中,一个是主键

这里是我的查询,我想退房,​​如果之前我运行它

INSERT INTO tblVisits (kha_id, adm_src) 
SELECT (kha_id, adm_src) from tblAdm_Src 

tblAdm_Src是导入的表,它会通过。谢谢。

+1

如果您需要在tblVisits中插入行,更新行或两者的混合,则不需要解释。 – Phil 2012-03-28 15:11:30

+0

我需要将行插入tblVisits。 – wootscootinboogie 2012-03-28 15:15:32

+0

那你为什么不尝试呢? – Phil 2012-03-28 16:03:11

回答

5

假设

  • 有在tblVisits没有数据
  • ID不是自动递增标识列
  • 所有列有默认值指定

然后你查询会起作用

insert into tblVisits (kha_id, adm_src) select kha_id, adm_src from tblAdm_Src 

如果某些列没有默认值,则需要在查询中提供默认值,例如,

insert into tblVisits (kha_id, adm_src, otherColumn) 
select kha_id, adm_src, 'a value' from tblAdm_Src 

如果kha_id是标识列,您需要使用SET IDENTITY_INSERT

set identity_insert tblVisits on 
insert into tblVisits (kha_id, adm_src) select kha_id, adm_src from tblAdm_Src 
set identity_insert tblVisits off 

如果在访问现有的数据,你需要更新匹配的行,但插入缺失的人,那么你需要的东西像

-- update existing rows 
update tblVisits 
    set adm_src = tblAdm_Sr.adm_src 
from VisitSource 
    where tblVisits.kha_id = tblAdm_Sr.kha_id 

-- insert missing rows 
insert into tblVisits (kha_id, adm_src) 
select kha_id, adm_src from tblAdm_Src 
    where not exists(
    select kha_id from tblVisits where tblVisits.kha_id = tblAdm_Src.kha_id) 

当然,并考虑到默认值,并自动增加必要的Id列

1

我想退房,​​如果之前我运行它

也许我不明白,以正确的方式你的问题,它会通过..但对于

  1. truning关闭自动提交
  2. 运行您的查询
  3. 检查结果
  4. commit(everything还好)或回滚(不是预期的结果)?
+0

我是新来的sql服务器,我不知道存在/知道如何做到这一点:) – wootscootinboogie 2012-03-28 15:04:49

相关问题