--> Title? : T-SQL入門攻略之13-修改數據表
--> Author : wufeng4552
--> Date?? : 2010-07-12
修改表名與字段名—sp_rename
--1修改表名SQL Server不直接提供修改表名的T-SQL語句,但是可以通過存儲過程實現
語法格式:sp_rename tablename,newtablename
use mydatabase
go
sp_rename tablename,newtablename
--2修改字段名也可以通過存儲過程實現
語法格式:sp_rename 'tablename.colname',newcolname,'column'
go
use mydatabase
go
sp_rename 'tablename.colname',newcolname,'column'
添加字段
--添加字段是給指定的表增加一個新的字段
語法格式:alter table table_name
add new_column data_type [interality_codition]
--如
USE MyDatabase;
GO
ALTER TABLE student
Add nationality varchar(20);
刪除字段
--刪除字段就是給某個表刪除一些字段
語法格式:alter table table_name
drop column column_name
--如
USE MyDatabase;
GO
ALTER TABLE student
DROP COLUMN nationality;
注:當一個字段被刪除后對應的值也將被刪除,在SQL Server中以下幾種類型的字段是不能刪除的:
1:定義了約束的字段.主要有:主鍵約束,外建約束,check約束,unique約束
2:指定了缺省值的字段
3:定義了索引的字段
4:已經綁定到規則的字段
也就是說,要刪除有上述特征的字段,必須刪除相應的約束(包括缺省值)和索引,以及結束綁定等。但是具有NOT NULL約束字段的卻是可以刪除的。
刪除字段 DROp constraint
--1查看字段約束,字段的約束信息保存在信息架構視圖
--information_schema.constraint_column_usage中
USE MyDatabase; -- 跟當前數據庫有關
go
SELECT TABLE_NAME 表名,
COLUMN_NAME 列名,
CONSTRAINT_NAME 約束名
FROM information_schema.CONSTRAINT_COLUMN_USAGE
WHERE TABLE_NAME = 'student'
--2查看指定表中缺省約束表達式,可以從information_schema.columns中查詢
USE MyDatabase; -- 跟當前數據庫有關
go
SELECT TABLE_NAME 表名,
COLUMN_NAME 列名,
COLUMN_DEFAULT 缺省表達式
FROM information_schema.columns
WHERE TABLE_NAME='student';
--3查看缺省約束名
select name 缺省約束名
from sysobjects
where object_id('表名')=parent_obj and xtype='D'
--4刪除字段約束
語法格式:drop table tablename
drop constraint constraintname
--如:
ALTER TABLE student DROP CONSTRAINT PK__student__2F36BC5B772B9A0B
ALTER TABLE student DROP CONSTRAINT CK__student__s_sex__7913E27D
ALTER TABLE student DROP CONSTRAINT CK__student__s_birth__7A0806B6
ALTER TABLE student DROP CONSTRAINT CK__student__s_avgra__7BF04F28
ALTER TABLE student DROP CONSTRAINT DF__student__s_speci__039170F0
ALTER TABLE student DROP CONSTRAINT DF__student__s_dept__0579B962
修改字段數據類型
語法格式:alter table tablename
alter column column_name newdatatype
如:修改長度
ALTER TABLE student
ALTER COLUMN s_name varchar(20);
--注:對于字段長度的改變可以變大也可以變小但是變小的時候,其長度不能小于當前字段值
--的最大長度。另外主鍵字段不能修改其數據類型
修改字段數據類型
--要先刪除約束
ALTER TABLE student
ALTER COLUMN s_no int
--如果有約束應先刪除
--查看約束
USE MyDatabase; -- 跟當前數據庫有關
go
SELECT TABLE_NAME 表名,
COLUMN_NAME 列名,
CONSTRAINT_NAME 約束名
FROM information_schema.CONSTRAINT_COLUMN_USAGE
WHERE TABLE_NAME = 'student'
--刪除約束
ALTER TABLE student
DROP CONSTRAINT PK__student__2F36BC5B18178C8A
--注:如果修改數據類型的種類(如字符型轉換為整型),應當能夠保證當前的字段值能成功的
--轉換到改變后的數據類型