2011-08-02 27 views
18

Tôi đang sử dụng phiên bản db2 9.7 * và dường như không thể tạo cột NOT NULL có thể vô hiệu theo bất kỳ cách nào đơn giản.Tạo một cột có thể vô hiệu hóa DB2

Rất tiếc, giải pháp sử dụng cơ sở dữ liệu thân thiện với nhà phát triển hơn không khả dụng. Về cơ bản, trong MySQL nói, tôi muốn làm một cái gì đó như thế này (nơi MY_COLUMN từng là VARCHAR (200) NOT NULL):

ALTER TABLE MY_TABLE MODIFY COLUMN MY_COLUMN VARCHAR(200); 

Trả lời

25

truy vấn cuối cùng của tôi đã kết thúc một cái gì đó như thế này:

ALTER TABLE MY_TABLE DATA CAPTURE NONE; 
ALTER TABLE MY_TABLE ALTER MY_COLUMN DROP NOT NULL; 
ALTER TABLE MY_TABLE DATA CAPTURE CHANGES; 
+1

Đối với những người khác vấp ngã về câu trả lời này: điều này là do [Chức năng SQL0270N không được hỗ trợ (Mã lý do = "100")] (http://www-01.ibm.com/support/knowledgecenter/SSEPGG_9.5.0/com.ibm.db2.luw.messages.sql.doc/doc/msql00270n.html?lang = vi) "Thả cột và thay đổi độ rỗng không được phép trên bất kỳ bảng nào có dữ liệu được ghi lại." - đó là lý do tại sao việc thu thập dữ liệu phải được thay đổi. –

11

các documentation nói rằng TABLE ALTER có khả năng giảm NOT NULL

+4

đúng. Vấn đề tôi phải đối mặt là việc thu thập dữ liệu được bật lên, mặc dù tôi đã không nhận ra điều đó và nhảy lên, có lẽ không công bằng, đến kết luận rằng DB2 đã bị quá tải không có lý do chính đáng. – lukewm

+1

Rất hữu ích. :-) Tôi đã có cùng một vấn đề trên môi trường DB2 và có thể giải quyết nó sau khi đọc câu trả lời của bạn với 'ALTER TABLE TABLE_NAME ALTER COLUMN COLUMN_NAME DROP NOT NULL' – Kaadzia

3

ALTER TABLE tên_bảng ALTER COLUMN tên_cột thả NOT NULL;

hoạt động trong DB2 9.7 trở lên. Bao giờ bạn có thể muốn thực hiện một bảng reorg (trong 9,7 db2 đặt bảng trong reorg trạng thái chờ giải quyết, tương tự trong 10,5 FP 5 quá):

gọi sysproc.admin_cmd ('reorg table TABLE_NAME');