我的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 失敗。
陳述式已經結束。
謝謝!
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
richardsuma大大您好!
我是您說的第三種情形所以無法用insert和update?,那我可以在table A 再增加一個欄位然後用第四種方式嗎?謝謝!
richardsuma大大您好!
不過我的table A沒有ID欄位@@"也可以嗎?謝謝!
有沒有可以根據、排序的欄位啊?
有的話,使用ROW_NUMBER當做序列號去排序,沒有,不建議這樣做。
badboy01提到:
table A沒有ID欄位
就是讓資料亂填就對了.....
Dear badboy01:
建議你 table A 與 B 最好要建立對應關係,
否則,下一次要在新增資料,無法判斷哪些已經 insert 過了?
或者,要從 table A 的欄位資料要更新至 table B的某些欄位,也沒有辦法更新。
所以應該建立兩個 table 間的對應關係才好。
richardsuma 大大您好!
這次我記取教訓了,我大概知道我錯在哪裡了,本來我把原來資料表用insert into只備份出proposed欄位,應該要連相關ID一起備份,因需求需要先刪除原資料表的欄位,再將備份的proposed欄位資料cpoy回去,結果因為無法對應所以發生慘劇= ="
Dear badboy01:
能夠了解自己錯在哪裡,表示你已經進步了!
未來對於資料庫的概念,應該會有進一步的了解。
很多東西不可能一蹴可及,一步一步練好底子,
自然很多東西就會觸類旁通。
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
大大您好!我測試後還是不行,出現一樣的訊息
欄位名稱沒有對應到....
<pre class="c" name="code">
insert into proposed B (proposed)
select HR01 AS proposed from A where HR01 IS NOT NULL
是不是因為我的資料表欄位中間有null值,所以不會按照資料列順序由上而下幫我複製過去,該怎麼下語法比較好?謝謝!
我錯了....
不對...uniqueid欄位被設定成not null了
insert資料的時候,這些not null欄位必須給個值
不然就是改資料表結構,為這些設定預設值
<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