DB2 列為null,無法設定該列為主鍵

fjzcau發表於2015-03-28
--建立表d,設定列dept 為 not null
db2inst1@sles11:~/sqllib> db2 "create table d (
     dept char(3) not null ,
     deptname char(20) not null,
     constraint c_dept_name  unique (deptname)
) in mb_data1"

--新增主鍵成功
db2inst1@sles11:~/sqllib> db2 "alter table d add constraint p_d_dept  primary key (dept)"

--刪除表
db2inst1@sles11:~/sqllib> db2 drop table d                                              

--建立表d,列dept 允許為 null
db2inst1@sles11:~/sqllib> db2 "create table d (                                         
dept char(3) ,
deptname char(20) not null,
constraint c_dept_name  unique (deptname)
) in mb_data1"
DB20000I  The SQL command completed successfully.

--設定主鍵報錯
db2inst1@sles11:~/sqllib> db2 "alter table d add constraint p_d_dept  primary key (dept)"
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0542N  The column named "DEPT" cannot be a column of a primary key or
unique key constraint because it can contain null values.  SQLSTATE=42831

--新增not null 約束
db2inst1@sles11:~/sqllib> db2 "alter table d alter column dept set not null"            
DB20000I  The SQL command completed successfully.

--無法新增主鍵 為什麼呢?
db2inst1@sles11:~/sqllib> db2 "alter table d add constraint p_d_dept  primary key (dept)"
DB21034E  The command was processed as an SQL statement because it was not a
valid Command Line Processor command.  During SQL processing it returned:
SQL0668N  Operation not allowed for reason code "7" on table "DB2INST1.D". 
SQLSTATE=57016

-----------------------------------------------------------------------------------------
--解決方案:重組表
db2 reorg table db2inst1.d

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/22661144/viewspace-1477211/,如需轉載,請註明出處,否則將追究法律責任。

相關文章