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

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. easyui form.rest和clear 重置表单和清除表单数据区别

    easyui中的一般我们在新增和编辑的时候 都是用一个form表单 那新增的时候 需要重置下表单内容,一般用 $('#EditForm').form('reset'); 大部分时候没问题,但是如果表单 ...

  2. RadioButtonList的兩種實現方式

    一種是修改ItemTemplate,即ListBoxItem裏面的内容 <ListBox ItemsSource="{Binding}"> <ListBox.It ...

  3. 比较简单的替换配置文件的shell脚本

    作为测试,日常更新部署测试版本,修改配置文件是每天必不可少的一个工作.特别是如果需要更改的配置文件存在于多个文件里,更是繁琐不堪. 找了一下Linux shell脚本里有个sed 命令可以实现这个需求 ...

  4. iic通讯 FPGA实现 mpu6050为例

    IIC最常用的通讯协议,但普遍用于单片机.arm这些,用FPGA实现大材小用,但对于菜鸡水平练练手很不错,考验串并转换和时序的控制.今天我就以mpu6050陀螺仪为例,实现FPGA的iic通信. 1. ...

  5. js 随机数范围

    Math.floor(Math.random()*(high-low+1) +low)

  6. OprenCV学习之路一:将彩色图片转换成灰度图

    //将一张彩色图片转成灰度图: //////////////////////////// #include<cv.h> #include<cvaux.h> #include&l ...

  7. 20180429NOIP提高组精英班Day1测试

  8. [luogu1485 HNOI2009] 有趣的数列 (组合数学 卡特兰数)

    传送门 Solution 卡特兰数 排队问题的简单变化 答案为\(C_{2n}^n \pmod p\) 由于没有逆元,只好用分解质因数,易证可以整除 Code //By Menteur_Hxy #in ...

  9. Cookie, LocalStorage 与 SessionStorage说明

     一.Cookie    Cookie 大小限制为4KB左右,不适合大量数据的存储.因为它们由每个对服务器的请求来传递,这使得 cookie 速度很慢而且效率也不高.它的主要用途有保存登录信息,比如你 ...

  10. Maven学习总结(6)——Maven与Eclipse整合

    Maven学习总结(六)--Maven与Eclipse整合 一.安装Maven插件 下载下来的maven插件如下图所示:,插件存放的路径是:E:/MavenProject/Maven2EclipseP ...