iT邦幫忙

0

Microsoft SQL A資料表欄位資料複製到B資料表欄位?

  • 分享至 

  • xImage

我的A資料表有一欄位HR01,想要複製這個HR01欄位內的資料到B資料表的proposed欄位,我該如何下語法呢?(B資料表已有其他欄位資料)
我使用下列語法
insert into proposed B (proposed)
select HR01 from A
出現錯誤訊息如下
訊息 515,層級 16,狀態 2,行 1
無法插入 NULL 值到資料行 'UniqueID',資料表 'HR01.dbo.proposed'; 資料行不得有 Null。INSERT 失敗。
陳述式已經結束。
謝謝!

看更多先前的討論...收起先前的討論...
外獅佬 iT邦大師 1 級 ‧ 2013-02-26 15:06:27 檢舉
已有其他欄位資料??
只是要把資料表A的某個欄位,填入資料表B的某個特定欄位?
那是不是該指定更新條件??
而且...應該用UPDATE而不是INSERT吧.....
請先弄懂一個觀念:
INSERT用於『新增』資料
UPDATE用於『更新』資料
外獅佬 iT邦大師 1 級 ‧ 2013-02-26 15:11:29 檢舉
資料表A有跟資料表B互相關連的欄位嗎?
沒有的話...是要怎麼判斷、更新資料啊??Orz
wiselou 說得沒錯, 這樣子的條件無法判斷,
也無法寫出 SQL statement.
badboy01 iT邦新手 2 級 ‧ 2013-02-26 17:27:43 檢舉
請教wiselou大大
如果我A資料表某欄位有41筆資料,該怎麼用update方式一次新增到B資料表的某欄位上(此欄位內容是null值,41筆資料順序由上而下填入資料列),謝謝!
Dear badboy01:
先釐清你是要 insert(插入) 還是 update(更新)
insert 是 要將 A table 資料 複製至 B table, 且 B table 沒有這些 record。
update 是 要將 A table 的某些欄位(如:HR01) 更新至 B table 的 proposed 欄位,
但是 A table 要有欄位(如ID) 與 B table 也有類似 ID一樣欄位的key,才可以使用
update 指令。

所以請問你要的是 insert 還是 update?
還有 資料庫的用語 應該清楚表示,
table 是指 資料表
record(row) 是指 一筆資料
column 是指 欄位

如果你要 insert 就要說 insert 41 records,
而不是 要將 table A 的 HR01 複製到 table B 的 proposed 欄位,
因為你的說法, 應該是 update 的說法,可是你又說要複製資料,
所以無法正確給你資訊?
外獅佬 iT邦大師 1 級 ‧ 2013-02-26 22:46:00 檢舉
我糊塗了....暈
badboy01 iT邦新手 2 級 ‧ 2013-02-27 09:53:09 檢舉
richardsuma大大您好!
抱歉我沒有說清楚,我是要將A資料表中的HR01的41筆資料,複製到B資料表的proposed欄位,但是其實proposed欄位中是都是null沒資料的,只是我不知道該用insert或是update?或是我也可以先將proposed欄位刪除,謝謝!
Dear badboy01:

我們還是來釐清一下問題?

首先 table A 只有 HR01 一個欄位嗎? 且 table B 也是只有 proposed 一個欄位?
如果是這樣,就是用 insert 指令。

第二 table A 如果是有 HR01,HR02,ID...等欄位, 且 table B 也是只有 proposed 一個欄位?
如果是這樣,就是用 insert 指令。

第三 table A 只有 HR01 一個欄位, 且 table B 有 proposed,ID...等欄位。
如果是這樣,就無法 insert 也無法 update , 因為無法判斷如何 update。

第四 table A 如果是有 HR01,HR02,ID...等欄位,且 table B 有 proposed,ID...等欄位。
這個時候就可以使用 update的指令。
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
8
richardsuma
iT邦大師 1 級 ‧ 2013-02-27 14:05:40
最佳解答

Dear badboy01:

我們還是來釐清一下問題?

首先 table A 只有 HR01 一個欄位嗎? 且 table B 也是只有 proposed 一個欄位?
如果是這樣,就是用 insert 指令。
select HR01
into B
from A

第二 table A 如果是有 HR01,HR02,ID...等欄位, 且 table B 也是只有 proposed 一個欄位?
如果是這樣,就是用 insert 指令。
select HR01
into B
from A
where ID like '88%'

第三 table A 只有 HR01 一個欄位, 且 table B 有 proposed,ID...等欄位。
如果是這樣,就無法 insert 也無法 update , 因為無法判斷如何 update。

第四 table A 如果是有 HR01,HR02,ID...等欄位,且 table B 有 proposed,ID...等欄位。
這個時候就可以使用 update的指令。
update A set A.proposed=B.HR01
from A, B
where A.ID=B.ID

看更多先前的回應...收起先前的回應...
badboy01 iT邦新手 2 級 ‧ 2013-02-27 14:37:31 檢舉

richardsuma大大您好!
我是您說的第三種情形所以無法用insert和update?,那我可以在table A 再增加一個欄位然後用第四種方式嗎?謝謝!

badboy01 iT邦新手 2 級 ‧ 2013-02-27 14:53:54 檢舉

richardsuma大大您好!
不過我的table A沒有ID欄位@@"也可以嗎?謝謝!

外獅佬 iT邦大師 1 級 ‧ 2013-02-27 16:09:27 檢舉

有沒有可以根據、排序的欄位啊?
有的話,使用ROW_NUMBER當做序列號去排序,沒有,不建議這樣做。

外獅佬 iT邦大師 1 級 ‧ 2013-02-27 16:10:13 檢舉

badboy01提到:
table A沒有ID欄位

就是讓資料亂填就對了.....落寞

Dear badboy01:
建議你 table A 與 B 最好要建立對應關係,
否則,下一次要在新增資料,無法判斷哪些已經 insert 過了?
或者,要從 table A 的欄位資料要更新至 table B的某些欄位,也沒有辦法更新。

所以應該建立兩個 table 間的對應關係才好。

badboy01 iT邦新手 2 級 ‧ 2013-02-27 17:10:02 檢舉

richardsuma 大大您好!
這次我記取教訓了,我大概知道我錯在哪裡了,本來我把原來資料表用insert into只備份出proposed欄位,應該要連相關ID一起備份,因需求需要先刪除原資料表的欄位,再將備份的proposed欄位資料cpoy回去,結果因為無法對應所以發生慘劇= ="

Dear badboy01:
能夠了解自己錯在哪裡,表示你已經進步了!
未來對於資料庫的概念,應該會有進一步的了解。
很多東西不可能一蹴可及,一步一步練好底子,
自然很多東西就會觸類旁通。

10

badboy01提到:
insert into proposed B (proposed)
select HR01 from A

==>

<pre class="c" name="code">insert into proposed B (proposed)
select HR01 from A where HR01 IS NOT NULL
看更多先前的回應...收起先前的回應...
badboy01 iT邦新手 2 級 ‧ 2013-02-26 16:07:12 檢舉

大大您好!我測試後還是不行,出現一樣的訊息

外獅佬 iT邦大師 1 級 ‧ 2013-02-26 16:11:16 檢舉

欄位名稱沒有對應到....

<pre class="c" name="code">
insert into proposed B (proposed)  
select HR01 AS proposed from A where HR01 IS NOT NULL
badboy01 iT邦新手 2 級 ‧ 2013-02-26 16:13:15 檢舉

是不是因為我的資料表欄位中間有null值,所以不會按照資料列順序由上而下幫我複製過去,該怎麼下語法比較好?謝謝!

外獅佬 iT邦大師 1 級 ‧ 2013-02-26 16:14:26 檢舉

我錯了....倒
不對...uniqueid欄位被設定成not null了
insert資料的時候,這些not null欄位必須給個值
不然就是改資料表結構,為這些設定預設值

外獅佬 iT邦大師 1 級 ‧ 2013-02-26 16:16:51 檢舉
<pre class="c" name="code">
insert into proposed B (uniqueid,proposed)    
select 'uniqueid欄位值' AS uniqueid,HR01 AS proposed from A

wiselou提到:
不對...uniqueid欄位被設定成not null了
insert資料的時候,這些not null欄位必須給個值

wiselou 說的沒錯... XD

5
CLF
iT邦新手 3 級 ‧ 2013-02-27 13:31:01

(B資料表已有其他欄位資料)
是不是該改用 update 才對..

我要發表回答

立即登入回答