今天有个暂时任务,改动生产环境的数据库表名和字段名。曾经要改动表名字段名都是在开发环境。直接打开

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 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语句改动表名和字段名的更多相关文章

  1. SQL语句 删除表user 中字段name 内容重复的记录,

    public class T01 { public static void main(String[] args) { int j=4; j=j+=j-=j*=j; System.out.printl ...

  2. mysql sql语句为表批量增加字段

    方法一 这里可以使用事务 bagin; //事务开始 alter table em_day_data add f_day_house7 int(11); alter table em_day_data ...

  3. SQL语句删除表中的字段只留下最新一行

    方法一 DELETE FROM A WHERE `name` in ( SELECT a.name FROM( SELECT name FROM A a GROUP BY name HAVING CO ...

  4. SQL语句表名或者字段名和保留字冲突解决方法

    最近开发遇到一个很奇葩的问题,简单做一下笔记 select * from Add ... 以上SQL语句会报错. 原因Add是表名,SQL语句保留字中又有Add 解决方法: select * from ...

  5. [转]关于oracle sql语句查询时表名和字段名要加双引号的问题

    oracle初学者一般会遇到这个问题.   用navicat可视化创建了表,可是就是不能查到!   后来发现②语句可以查询到 ①select * from user; 但是,我们如果给user加上双引 ...

  6. postgresql 字段sql语句 更改表名

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/sq8706/article/detail ...

  7. MyBatis构建sql时动态传入表名以及字段名

    今天项目需要用到动态表名,找到这一篇文章,亲测可用 用了mybatis很长一段时间了,但是感觉用的都是比较基本的功能,很多mybatis相对ibatis的新功能都没怎么用过.比如其内置的注解功能之类的 ...

  8. SQL Server 2008 R2——根据数据查找表名和字段名 根据脏数据定位表和字段

    =================================版权声明================================= 版权声明:原创文章 谢绝转载  请通过右侧公告中的“联系邮 ...

  9. SQL 查询所有表名、字段名、类型、长度、存储过程、视图

    -- 获得存储过程创建语句 select o.xtype,o.name,cm.text from syscomments cm inner join sysobjects o on o.id=cm.i ...

随机推荐

  1. Web程序安全机制

    ASP.NET提供了一个多层的安全模型,这个模型能够非常容易的保护Web应用程序. 安全策略没有必要非常复杂,但是需要应用安全策略的地方却是非常广泛的.程序员需要保证自己的应用程序不能被骗取,而把私有 ...

  2. [hihocoder][Offer收割]编程练习赛62

    方向 #pragma comment(linker, "/STACK:102400000,102400000") #ifndef ONLINE_JUDGE #include &qu ...

  3. 第二个Activity返回数据

    背景内容:FirstActivity先跳转到TwoActivity,再由TwoActivity返回,并还返回数据. 一般情况下Activity间跳转只需要调用 startActivity(Intent ...

  4. 移动web——bootstrap媒体对象

    基本模板 1.这些组件都具有在文本内容的左或右侧对齐的图片(就像博客评论或 Twitter 消息等) <div class="media"> <div class ...

  5. linux mysql-workbench 创建与正式库表结构一样的表

    先在本地创建数据库 字符集选择这个 创建数据库成功 创建与正式库一样的表 step1: 连接正式库,找到要生成的表,导出创建表的sql语句 step2: 找到本地数据库,选择表,在sql执行区域复制s ...

  6. CAD保存高版本的dwg(com接口)

    主要用到函数说明: MxDrawXCustomFunction::Mx_SaveDwgEx 保存DWG文件,可以设置保存的文件版本号和密码,详细说明如下: 参数 说明 IN CString sFile ...

  7. linux下如何限制普通用户更改密码

    问题描述: 为了方便linux管理员对所有用户的进行管理,如何限制普通用户更改密码? 解决方法: 禁止普通用户更改密码: /usr/bin/passwd 若要允许普通用户更改密码: /usr/bin/ ...

  8. STL源码分析之迭代器

    前言 迭代器是将算法和容器两个独立的泛型进行调和的一个接口. 使我们不需要关系中间的转化是怎么样的就都能直接使用迭代器进行数据访问. 而迭代器最重要的就是对operator *和operator-&g ...

  9. [Luogu] P3413 萌数

    题目背景 本题由世界上最蒟蒻最辣鸡最撒比的SOL提供. 寂月城网站是完美信息教室的官网.地址:已和谐 . 题目描述 辣鸡蒟蒻SOL是一个傻逼,他居然觉得数很萌! 好在在他眼里,并不是所有数都是萌的.只 ...

  10. 8.3 操作MongoDB数据库

    一项权威调查显示,在大数据时代软件开发人员必备的十项技能中MongoDB数据库名列第二,仅次于HTML5.MongoDB是一个基于分布式文件存储的文档数据库,可以说是非关系型(Not Only SQL ...