SQL語句修改表名和欄位名,sql語句欄位
今天有個臨時任務,修改生產環境的資料庫表名和欄位名。以前要修改表名欄位名都是在開發環境,直接開啟
SQL Server找到對應的表或欄位重新命名就OK啦,可是這是線上資料庫,再想直接F2修改是不可能的啦。怎麼辦?乖
乖寫指令碼唄。上網瞭解了一些相關資料,結合我自己操作過程中出現的一些實際問題簡單作個總結,再次加深下印
象。
SQL內建了一系列的系統預存程序。其中sp_rename就具有修改表名和列名的功能。對於sp_rename是這樣定
義的:更改當前資料庫中使用者建立對象(如表、列或使用者定義資料類型)的名稱。
基本文法
修改表名:EXEC sp_rename ‘[原有表名]’, '[新表名]';
修改列名:EXEC sp_rename ‘[原有列名]’, ‘[新列名]' , 'COLUMN';
百度百科連結
http://baike.baidu.com/link?url=62aL-_e-KkdpZjw-dx_uAnOu8xEs9nuLd0TPn-ESZZy_hw2ahMYtjUVZyWToQn6w9r7lB_H_5qLmF4aj645Njq
執行個體講解
現有資料庫testDB,架構體dbo,dbo下有三張表分別為animal(code,name),bird(code,name,animalCode'),cat(code,name,animalCode')
接下來我對這三張表進行如下操作:
修改表名、修改列名、修改屬性類型、添加屬性
<span style="font-family:Verdana;font-size:18px;">USE testDBGO--將animal表名更改為animalCategoryEXEC sp_rename '[dbo].[animal]','animalCategory';--將bird表中的外鍵animalCode更改為animalCategoryCodeEXEC sp_rename '[dbo].[bird].animalCode','animalCategoryCode','COLUMN';--將bird表中屬性name的類型修改為VARCHARALTER TABLE [dbo].[bird] ALTER COLUMN name VARCHAR(20)--向bird表中添加顏色外鍵ALTER TABLE [dbo].[bird] ADD colorCode INT NULLGO</span>
注意下面一段指令碼執行後拋出異常:
訊息 15248,層級 11,狀態 1,過程 sp_rename,第 238 行
參數 @objname 不明確或所聲明的 @objtype (COLUMN)有誤。
<span style="font-family:Verdana;font-size:18px;">USE testDBGO--將cat表名更改為petCatEXEC sp_rename 'cat','petCat';--將bird表中的外鍵animalCode更改為animalCategoryCodeEXEC sp_rename 'cat.animalCode','animalCategoryCode','COLUMN';GO</span>
這樣看,也沒有什麼錯呀,修改表名、修改列名。再仔細看你就會發現:執行完第一句SQL後cat表已經被重命
名為petCat,所以再次執行第二句SQL的時候就找不到表cat了。
因此如果同時修改表名和欄位名要注意修改的先後順序或者直接記住:先改列後改表
另外還有一點需要注意
我的這一段指令碼沒有給架構體,即表的限定條件dbo。當不給表限定條件的時候預設為dbo,所以我這裡沒有報
錯。假如現在cat表的限定條件為tmp.cat,那麼這段指令碼會拋出異常,因為在預設的dbo下找不到cat表。
因此在對錶進行操作的時候要養成一個好習慣:隨時都帶有架構體。
感受
知識點不多,但也是今天的收穫,滴水石川。
相比較第一點,這一點收穫更重要:清楚的思維邏輯和好的編程習慣!
在執行的SQL語句中還應用到了另外一個預存程序sys.sp_addextendedproperty,作個簡單樣本。感興趣的話
可以上網查查。
<span style="font-family:Verdana;font-size:18px;">============================================================= -- 作 者:wyq-- 功 能:學生資訊表添加是否是教師子女屬性 -- 日 期:2015-7-28-- 說 明: --學生資訊表添加是否是教師子女屬性 =============================================================BEGIN TRAN USE BasicServiceALTER TABLE dbo.StudentInfo ADDIsToTeacher BIT NULLEXEC sys.sp_addextendedproperty @name = N'MS_Description', @value = N'是否是教師子女', @level0type = N'SCHEMA', @level0name = N'dbo', @level1type = N'TABLE', @level1name = N'StudentInfo', @level2type = N'COLUMN', @level2name = N'IsToTeacher'--COMMIT TRAN</span>
關鍵字:資料庫 修改表名 修改列名 修改屬性類型 sp_rename
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。