SQL语句改动表名和字段名
今天有个暂时任务,改动生产环境的数据库表名和字段名。曾经要改动表名字段名都是在开发环境。直接打开
SQL Server找到相应的表或字段重命名就OK啦,但是这是线上数据库,再想直接F2改动是不可能的啦。
怎么办?乖
乖写脚本呗。
上网了解了一些相关资料,结合我自己操作过程中出现的一些实际问题简单作个总结,再次加深下印
象。
SQL自带了一系列的系统存储过程。当中sp_rename就具有改动表名和列名的功能。对于sp_rename是这样定
义的:更改当前数据库中用户创建对象(如表、列或用户定义数据类型)的名称。
基本的语法
改动表名:EXEC sp_rename ‘[原有表名]’, '[新表名]';
改动列名:EXEC sp_rename ‘[原有列名]’, ‘[新列名]' , 'COLUMN';
百度百科链接
实例解说
现有数据库testDB,框架体dbo。dbo下有三张表分别为animal(code,name),bird(code,name,animalCode'),cat(code,name,animalCode')
接下来我对这三张表进行例如以下操作:
改动表名、改动列名、改动属性类型、加入属性
<span style="font-family:Verdana;font-size:18px;">USE testDB GO --将animal表名更改为animalCategory
EXEC sp_rename '[dbo].[animal]','animalCategory'; --将bird表中的外键animalCode更改为animalCategoryCode
EXEC sp_rename '[dbo].[bird].animalCode','animalCategoryCode','COLUMN'; --将bird表中属性name的类型改动为VARCHAR
ALTER TABLE [dbo].[bird] ALTER COLUMN name VARCHAR(20) --向bird表中加入颜色外键
ALTER TABLE [dbo].[bird] ADD colorCode INT NULL GO</span>
注意以下一段脚本运行后抛出异常:
消息 15248。级别 11,状态 1,过程 sp_rename。第 238 行
參数 @objname 不明白或所声明的 @objtype (COLUMN)有误。
<span style="font-family:Verdana;font-size:18px;">USE testDB GO --将cat表名更改为petCat
EXEC sp_rename 'cat','petCat'; --将bird表中的外键animalCode更改为animalCategoryCode
EXEC 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 BasicService ALTER TABLE dbo.StudentInfo ADD
IsToTeacher BIT NULL EXEC 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>
keyword:数据库 改动表名 改动列名 改动属性类型
sp_rename
SQL语句改动表名和字段名的更多相关文章
- SQL语句 删除表user 中字段name 内容重复的记录,
public class T01 { public static void main(String[] args) { int j=4; j=j+=j-=j*=j; System.out.printl ...
- mysql sql语句为表批量增加字段
方法一 这里可以使用事务 bagin; //事务开始 alter table em_day_data add f_day_house7 int(11); alter table em_day_data ...
- SQL语句删除表中的字段只留下最新一行
方法一 DELETE FROM A WHERE `name` in ( SELECT a.name FROM( SELECT name FROM A a GROUP BY name HAVING CO ...
- SQL语句表名或者字段名和保留字冲突解决方法
最近开发遇到一个很奇葩的问题,简单做一下笔记 select * from Add ... 以上SQL语句会报错. 原因Add是表名,SQL语句保留字中又有Add 解决方法: select * from ...
- [转]关于oracle sql语句查询时表名和字段名要加双引号的问题
oracle初学者一般会遇到这个问题. 用navicat可视化创建了表,可是就是不能查到! 后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...
- postgresql 字段sql语句 更改表名
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sq8706/article/detail ...
- MyBatis构建sql时动态传入表名以及字段名
今天项目需要用到动态表名,找到这一篇文章,亲测可用 用了mybatis很长一段时间了,但是感觉用的都是比较基本的功能,很多mybatis相对ibatis的新功能都没怎么用过.比如其内置的注解功能之类的 ...
- SQL Server 2008 R2——根据数据查找表名和字段名 根据脏数据定位表和字段
=================================版权声明================================= 版权声明:原创文章 谢绝转载 请通过右侧公告中的“联系邮 ...
- SQL 查询所有表名、字段名、类型、长度、存储过程、视图
-- 获得存储过程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.i ...
随机推荐
- Android fragment-findFragmentByTag 始终返回 null
我曾四处看看,在我的案子中找到几个与类似的主题,但没有帮助的问题.我想访问现有活动片段使用getSupportFragmentManager().findFragmentByTag(TAG),但它始终 ...
- Android开发笔记(6)——类的设定与继承
转载请注明http://www.cnblogs.com/igoslly/p/6838991.html [类]的设定与继承 当设置相同格式的TextView时,已提出在styles.xml自定义格式统一 ...
- Canvas——基本入门
基本概念 1.canvas 是 HTML5 提供的一个用于展示绘图效果的标签. canvas 原意画布, 帆布. 在 HTML 页面中用于展示绘图效果. 最早 canvas 是苹果提出的一个方案, 今 ...
- 认识 java JVM虚拟机选项 Xms Xmx PermSize MaxPermSize 区别
点击window---->preferences---->配置的tomcat---->JDK,在Optional Java VM arguments:中输入 -Xmx512M -Xm ...
- 第一个真正意义的jsp程序,连接msql数据库
1. mysql数据库 :在百度上下一个安装包mysql-5.7.17.msi,只装服务即可,选择开发使用 2.建库,建表 mysql> create table testdb; 导入相关建表 ...
- cannot load oci dll,193-navicate连接oracle的解决方法
navicat连接远程数据库时 是因为instantclient是64位的,navicat是32位的,两者要一致 因为自己的navicat premium是破解版的,所以就另找了instantclie ...
- ipc (进程间通信
进程间通信(IPC,Inter-Process Communication),指至少两个进程或线程间传送数据或信号的一些技术或方法.进程是计算机系统分配资源的最小单位(严格说来是线程).每个进程都有自 ...
- Linux快速入门教程-进程管理ipcs命令学习
使用Linux系统必备的技能之一就是Linux进程管理,系统运行的过程正是无数进程在运行的过程.这些进程的运行需要占用系统的内存等资源,做好系统进程的管理,对于我们合理分配.使用系统资源有非常大的意义 ...
- uva 1401
Neal is very curious about combinatorial problems, and now here comes a problem about words. Knowing ...
- Error: Registry key 'Software\JavaSoft\Java Runtime has value '1.8', but '1.7' is
cmd下输入 java命令时出现该错误: Error: Registry key 'Software\JavaSoft\Java Runtimehas value '1.8', but '1.7' i ...