说实话,感觉SQL Server的资料真的好难找(也有可能是很多人在吐槽的CSDN的搜索功能不够强……),我想找个修改表名的方法,结果找了好久,才找到一个可行的,留个纪念,希望也能够帮到你(多个人转发,搜的概率应该比较大!)。
一、利用ALTER语句修改?
alter语句的大概的语法是这样的:
ALTER TABLE <表名>
[ADD [COLUMN] <新列名><数据类型>[完整性约束]]
[ADD <表级完整性约束>]
[DROP[COLUMN] <列名> [CASCADE|RESTRICT]]--注意:SqlServer取消了[CASCADE|RESTRICT]这两个项
[DROP CONSTRAINT <完整性约束名> [CASCADE|RESTRICT]]
[ALTER COLUMN <列名><数据类型>];
--准备事例
--Student表
CREATE TABLE Student
(Sno CHAR(9) PRIMARY KEY,
Sname CHAR(8) NOT NULL,
Ssex CHAR(2) DEFAULT '男' CHECK (Ssex IN ('男','女')),
Sage INT,
Sdept CHAR(20)
);
--建立索引
CREATE INDEX Stu_sno ON Student(Sno);
--看下ALTER能不能满足要求:
--1.修改表名?好像不行!!!
--2.修改字段名?好像也不行!!!
ALTER TABLE Student rename column Sno to Stuno;--报错
--3.修改索引名?好像还是不行!!!
--那ALTER能干啥呢?
--1.新增列
ALTER TABLE Student ADD S_entrance DATETIME;--向基本表Student中增加“入学时间”属性列。
--2.新增约束
ALTER TABLE Course ADD UNIQUE(Cname);--对Course表,增加课程名称必须取唯一值的约束条件。
--3.修改某字段的数据类型
ALTER TABLE Student ALTER COLUMN Sage SMALLINT;--将Student表中Sage(年龄)的数据类型改为SMALLINT型。
这一波好像不行,达不到我想要的要求,那就接着往下看吧。
二、调用系统的存储过程修改?
先了解下系统存储过程是啥?
存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集合,经编译后存储在数据库中,用户通过指定存储过程的名称并给出参数来执行。
系统存储过程是系统创建的存储过程,目的在于能够方便的从系统表中查询信息或完成与更新数据库表相关的管理任务或其他的系统管理任务。SQL Server系统的存储过程主要存储在master数据库中,以“sp”下划线开头的存储过程。尽管这些系统存储过程在master数据库中,但我们在其他数据库还是可以调用系统存储过程。有一些系统存储过程会在创建新的数据库的时候被自动创建在当前数据库中。
你可以在这里找到:
1. 修改表名
该存储过程的定义如下:
--修改表名
EXEC sp_rename @objname = '旧表名', @newname = '新表名'
EXEC sp_rename '旧表名', '新表名'
--例1 把表TABLE1改为TABLE2
EXEC sp_rename @objname = 'TABLE1', @newname = 'TABLE2'
--例2(简写)把表TABLE1改为TABLE2
EXEC sp_rename 'TABLE1','TABLE2'
2. 修改列名
--修改列名
EXEC sp_rename @objname = '表名.旧列名', @newname = '新列名', @objtype = 'column'
EXEC sp_rename '表名.旧列名', '新列名', 'column'
--例1 把表TABLE的列tid改为id
EXEC sp_rename @objname = 'TABLE.tid', @newname = 'id', @objtype = 'column'
--例2(简写)把表TABLE的列tid改为id
EXEC sp_rename 'TABLE.tid', @newname = 'id', @objtype = 'column'
3. 修改索引名
--修改索引名
EXEC sp_rename @objname = '表名.旧索引名', @newname = '新索引名', @objtype = 'index'
EXEC sp_rename '表名.旧索引名', '新索引名', 'index'
--例1 把表TABLE的列tid改为id
EXEC sp_rename @objname = 'TABLE.IDX_TYPE_CODE', @newname = 'IDX_CODE', @objtype = 'index'
--例2(简写)把表TABLE的索引IDX_TYPE_CODE改为IDX_CODE
EXEC sp_rename 'TABLE.IDX_TYPE_CODE', 'IDX_CODE', 'index'
OK可以满足要求。