如何用SQL语句在指定字段前面插入新的字段?

2007-10-17 09:28:00|  分类: 笔记|举报|字号 订阅

 
 
create proc addcolumn 
@tablename varchar(30), --表名 
@colname varchar(30), --要加的列名 
@coltype varchar(100), --要加的列类型 
@colid int --加到第几列 
as

declare @colid_max int 
declare @sql varchar(1000) --动态sql语句 
-------------------------------------------------- 
if not exists(select 1 from sysobjects 
where name = @tablename and xtype = 'u') 
begin 
raiserror 20001 '没有这个表' 
return -1 
end 
-------------------------------------------------- 
if exists(select 1 from syscolumns 
where id = object_id(@tablename) and name = @colname) 
begin 
raiserror 20002 '这个表已经有这个列了!' 
return -1 
end 
-------------------------------------------------- 
--保证该表的colid是连续的 
select @colid_max = max(colid) from syscolumns where id=object_id(@tablename)

if @colid > @colid_max or @colid < 1 
set @colid = @colid + 1 
-------------------------------------------------- 
set @sql = 'alter table '+@tablename+' add '+@colname+' '+@coltype 
exec(@sql)

select @colid_max = colid 
from syscolumns where id = object_id(@tablename) and name = @colname 
if @@rowcount <> 1 
begin 
raiserror 20003 '加一个新列不成功,请检查你的列类型是否正确' 
return -1 
end 
-------------------------------------------------- 
--打开修改系统表的开关 
EXEC sp_configure 'allow updates',1 RECONFIGURE WITH OVERRIDE

--将新列列号暂置为-1 
set @sql = 'update syscolumns 
set colid = -1 
where id = object_id('''+@tablename+''') 
and colid = '+cast(@colid_max as varchar(10)) 
exec(@sql)

--将其他列的列号加1 
set @sql = 'update syscolumns 
set colid = colid + 1 
where id = object_id('''+@tablename+''') 
and colid >= '+cast(@colid as varchar(10)) 
exec(@sql)

--将新列列号复位 
set @sql = 'update syscolumns 
set colid = '+cast(@colid as varchar(10))+' 
where id = object_id('''+@tablename+''') 
and name = '''+@colname +'''' 
exec(@sql) 
-------------------------------------------------- 
--关闭修改系统表的开关 
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE 
go

调用方法: 
exec addcolumn '表名','新列名','新列类型',加到第几个位置 
如: 
exec addcolumn 'test','id2','char(10)',2 
表示将id2这个列加到表test的第二个位置,类型是char(10)。

------------------------------------------------------

上面的是纯SQL语句的实现方法。当然,也可以把需要修改后的字段顺序先select...into...到一个临时表,然后drop旧表,把临时表复制或者改名过来,也可以实现原来需要的功能。但是这样如果需要修改的表一多,就会给数据库带来很多日志,而且可能会丢掉原来的字段关系。所以还是要看情况选择使用。

如何用SQL语句在指定字段前面插入新的字段?的更多相关文章

  1. 如何用sql语句复制一张表

    如何用sql语句复制一张表 1.复制表结构及数据到新表 CREATE TABLE 新表 SELECT * FROM 旧表 这种方法会将oldtable中所有的内容都拷贝过来,当然我们可以用delete ...

  2. 如何用SQL语句查询Excel数据?

    如何用SQL语句查询Excel数据?Q:如何用SQL语句查询Excel数据? A:下列语句可在SQL SERVER中查询Excel工作表中的数据. 2007和2010版本: SELECT*FROMOp ...

  3. mysql里面如何用sql语句让字符串转换为数字

    sql语句将字符串转换为数字默认去掉单引号中的空格,遇到空格作为字符串截止, SELECT '123 and 1=1' +0 结果为123 MySQL里面如何用sql语句让字符串的‘123’转换为数字 ...

  4. SQL语句往Oracle数据库中插入日期型数据(to_date的用法)

    Oracle 在操作数据库上相比于其他的 T-sql 有微小的差别,但是在插入时间类型的数据是必须要注意他的 to_date 方法,具体的情况如下: --SQL语句往Oracle数据库中插入日期型数据 ...

  5. 【转载】C#中使用Insert方法往ArrayList集合指定索引位置插入新数据

    ArrayList集合是C#中的一个非泛型的集合类,是弱数据类型的集合类,可以使用ArrayList集合变量来存储集合元素信息,在ArrayList集合操作过程中,可以使用ArrayList集合类的I ...

  6. mysql中通过sql语句查询指定数据表的字段信息

      mysql数据库在安装完成时,自动创建了information_schema.mysql.test这三个数据库.其中,information_schema记录了创建的所有数据库的相关信息,因此可以 ...

  7. 用SQL语句建库建表建约束(用SQl语句在指定盘符创建文件夹)

    一 :创建数据库 创建一个数据文件和一个日志文件(MySchool) create database MySchoolon primary      --默认属于primary主文件组,可省略(--数 ...

  8. 数据库SQL语句查询指定时间段内的数据

    [摘要]有的时候,我们需要查询数据库某段时间之间的数据,比如2016年5月1号到到5月3号之间用户注册数量(特殊节假日期间)等.那么用SQL语句如何实现呢? 首先,数据表中的存时间的字段比如是addt ...

  9. 如何用SQL语句实现Mysql数据库的备份与还原

    以前一直做android客户端的项目,根本没有开发asp.net mvc的开发,现阶段做了一个模块,参数设置,以及数据库的备份与还原.其需求如下: 参数设置 本项参数设置为对自动数据备份进行设置,管理 ...

随机推荐

  1. 使用Django.core.cache操作Memcached导致性能不稳定的分析过程

    使用Django.core.cache操作Memcached导致性能不稳定的分析过程 最近测试一项目,用到了Nginx缓存服务,那可真是快啊!2Gb带宽都轻易耗尽. 不过Api接口无法简单使用Ngin ...

  2. 洛谷 P1541 乌龟棋 —— DP

    题目:https://www.luogu.org/problemnew/show/P1541 DP. 代码如下: #include<iostream> #include<cstdio ...

  3. HDU 5945 Fxx and game (DP+单调队列)

    题意:给定一个 x, k, t,你有两种操作,一种是 x - i (0 <= i <= t),另一种是 x / k  (x % k == 0).问你把x变成1需要的最少操作. 析:这肯定是 ...

  4. jetbrains软件使用

    1.注册(有条件的话建议使用官方渠道注册https://www.jetbrains.com/store) 2018 license server http://idea.congm.in 2.禁用双击 ...

  5. H5的draggable属性和jqueryUI.sortable

    拖放 拖放是一种常见的特性,即抓取对象以后拖到另一个位置. 一.HTML5 新特性 在 HTML5 中,拖放是标准的一部分,任何元素都能够拖放. Event On Event Handler 描述 d ...

  6. docker 中部署一个springBoot项目

    docker 中部署一个springBoot项目 (1)介绍 springBoot项目 1.项目结构 2.pom.xml <?xml version="1.0" encodi ...

  7. Android 线程池系列教程(5)与UI线程通信要用Handler

    Communicating with the UI Thread 上一课 下一课 1.This lesson teaches you to Define a Handler on the UI Thr ...

  8. GUID的学习

    GUID(全局统一标识符)是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的.通常平台会提供生成GUID的API.生成算法很有意思,用到了以太网卡地址.纳秒级时间.芯片ID码和许多可 ...

  9. 456 132 Pattern 132模式

    给定一个整数序列:a1, a2, ..., an,一个132模式的子序列 ai, aj, ak 被定义为:当 i < j < k 时,ai < ak < aj.设计一个算法,当 ...

  10. 414 Third Maximum Number 第三大的数

    给定一个非空数组,返回此数组中第三大的数.如果不存在,则返回数组中最大的数.要求算法时间复杂度必须是O(n).示例 1:输入: [3, 2, 1]输出: 1解释: 第三大的数是 1.示例 2:输入: ...