2012-03-28 169 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

相關問題