将两列复制到另一个表,一个是主键

时间:2012-03-28 14:57:55

标签: sql sql-server tsql

我有一个包含主键kha_ID的大表(Visits)。这个表中有十几个列,我只想替换其中一个,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是导入的表。感谢。

2 个答案:

答案 0 :(得分: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)

  

我想检查一下它是否会在我运行之前通过

也许我不能以正确的方式理解你的问题..但是呢

  1. 关闭自动提交
  2. 运行查询
  3. 检查结果
  4. 提交(一切正常)或回滚(不是预期的结果)?