2011年11月23日 星期三

SQL 改欄位大小, 又遇到個小鐵板

分類: SQL 程式開發
2011/11/23 15:00



原本想說把某個欄位大小由24 改為25 , 應該是個小事情, 結果一作才發現又是"鐵板"一塊.
原因是這些欄位有可能在不同的TABLE 會互相作關聯, 同時也有可能是PRIMARY KEY.
不得己, 改用SQL 語法,見招拆招:
1.這種情況最好了,
----------------------------------------------------------------------------------
alter table DJ_TABLE ALTER COLUMN ABC CHAR(25)
因為沒有任何限制
----------------------------------------------------------


2.下面這個就有點麻煩, 因為是個FOREIGH KEY 的欄位
作法:
先把這個 FOREIGN KEY DROP 掉
再調整欄位大小
最後再把 FOREIGH KEY ADD回去
----------------------------------------------------------

ALTER TABLE VOY DROP  CONSTRAINT [IX_ABC]
alter table  ABC_TABLE  ALTER COLUMN ABC_COLUMN  CHAR(25)
alter table ABC_TABLE  ADD CONSTRAINT [IX_ABC] UNIQUE NONCLUSTERED
(
 [ABC_COLUMN] ASC,
 [DEF_COLUMN] ASC,
 [GHI_COLUMN] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
----------------------------------------------------------

3.最後這毎更麻煩, 因為是個PRIMARY KEY 的欄位
作法:
先把這個 FOREIGN KEY DROP 掉
再調整欄位大小 , 記得要作 NOT NULL , 因為 PRIMARY KEY
最後再把 PRIMARY KEY ADD回去

----------------------------------------------------------
alter table V_TABLE DROP  CONSTRAINT [PK_V_TABLE]
alter table V_TABLE ALTER COLUMN NAME CHAR(25) NOT NULL
alter table V_TABLE ADD  CONSTRAINT [PK_V_TABLE] PRIMARY KEY CLUSTERED
(
 [CODE] ASC,
 [NAME] ASC
)WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [PRIMARY]
----------------------------------------------------------

沒有留言: