1. 程式人生 > >Oracle和SQLServer修改欄位的型別和長度,不為空

Oracle和SQLServer修改欄位的型別和長度,不為空

在SQLServer資料庫:

      修改欄位型別和長度:

              alter table   student|表名  alter column  stucard|欄位名  varchar(18)|含長度的型別|型別;

(若改多列的欄位,就以逗號","相隔:

alter table student alter column (stuid varchar(5)
,stuname varchar(20));)

        不為空:
           alter table stud|表名  alter column stucard|欄位名 varchar(18)|型別 not null;

(若改多列的欄位,就以逗號","相隔:
alter table student alter column 
(stuid varchar(5) not null,stuname varchar(8) not null);)
(若直接"alter table stud alter column stucard not null;",將會報錯:關鍵字 'not' 附近有語法錯誤。 (156))

在Oracle資料庫:

      修改欄位型別和長度:

         alter table student/表名 modify(stuid/欄位名  varchar2(18)/含長度的型別/型別);

            (若改多列的欄位,就以逗號","相隔:
alter table student modify(stuid varchar2(6),stuname varchar2(12));)

            當你只改一個時,也可以不用括號,也就成了下面這條語句:

            alter table student modify   stuid  varchar2(18);

  /*

當欄位沒有資料或者要修改的新型別和原型別相容時,

在SQLServer或者Oracle裡 修改欄位大小 比原來大或小都沒關係

SQLServer裡可以直接alter修改、Oracle裡可以直接modify修改。

但是

當欄位資料用要修改的新型別和原型別不相容時,就要間接修改,

可能新建欄位來轉移,可能將該欄位和其資訊加入到新表(只有該欄位的表)

*/

不為空:

alter table student modify stuid not null;

(若改多列的欄位,就以逗號","相隔:
alter table student modify(stuid not null,stuname not null);)

我這上面的"|"、"/"都表示"或者"的意思......

注意:

在Oracle裡:

        想修改長度,(1)當表裡沒有資料時,你修改的資料型別長度,無論"從小改大"還是"從大改小",都不會報錯,

(2)當表有資料時你只能"改大",不可"改小",若改小了,會彈出提示,意思不就是:

要刪除所有資料才可以"減小長度/精度"咯?!

[若你執著"改小長度"的話,你可以"drop table XX",要是沒成為別的表的外來鍵的話,則順利刪除,要是是別的表的外來鍵的話,你得將那個"所謂的別的表"給刪了,再刪這個表,還有呀~要是你不想將原來資料刪,那你得將這個表複製到"新"表點選開啟連結或者https://blog.csdn.net/qq_41042595/article/details/80644290刪除這個表]

在SQLServer裡:

想修改長度,(1)當表裡沒有資料時,你修改的資料型別長度,無論"從小改大"還是"從大改小",都不會報錯,

(2)當表有資料時你能"改大"和"改小",只!!!要!!!你修改的長度大於等於"表裡的最長資料的長度"就可以啦!!!

要是你修改的長度小於"表裡的最長資料的長度",就會出現下面那三行的報錯提示,要是別的表的外來鍵的話,處理方式也是上面所講的一樣!!!

訊息 8152,級別 16,狀態 14,第 2 行
將截斷字串或二進位制資料。

語句已終止。

要是在Oracle裡執行"alter table student alter column stuid varchar(18);"

錯不在varchar(18),而是在"這條語句",而且會出現這樣的錯誤提示

還有:在Oracle裡,可以用int 和 varchar(數值) 型別,後臺分別自動轉成  number(38) 和 varchar2(數值),number的長度/精度在1~38間