摘自: http://bbs.csdn.net/topics/40236129

在任何位置插入列:
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 'a02','id2','char(10)',2
表示将id2这个列加到表test的第二个位置,类型是char(10)。
select * from a02

ms sql 在任何位置 添加列的更多相关文章

  1. DataTable 指定位置添加列

    dt.Columns.Add("id").SetOrdinal(指定位置);

  2. C#DataTable添加列、C#指定位置添加列

    DataSet ds = SQlHelper.GetDataTable(Con, sb.ToString()); ds.Tables[].Columns.Add("Check", ...

  3. MS SQL 数据类型转换

    MS SQL 转换数据类型 select cast(列A as int) 列A select convert(int,列A) 列A --转字符串为int select len(ltrim(str('数 ...

  4. Mysql下在某一列后即表的某一位置添加新列的sql语句

    Mysql简介 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上的中小型网站中.由于其体积小.速度快.总体拥有成本低,尤 ...

  5. 用SQL语句创建和删除Access数据库中的表;添加列和删除列

    用SQL语句创建和删除Access数据库中的表;添加列和删除列 Posted on 2009-08-11 13:42 yunbo 阅读(1240) 评论(0) 编辑 收藏 用SQL语句创建和删除Acc ...

  6. ms sql server,oracle数据库实现拼接一列的多行内容

    项目中要将查询出的一列的多行内容拼接成一行,如下图:ypmc列. ms sql server: 网上查到相关资料如下:http://blog.csdn.net/rolamao/article/deta ...

  7. SQL Server查询时添加一列连续的自增列

    SQL Server查询时添加一列连续的自增列 在SQL Server数据库中表信息会用到Identity关键字来设置自增列.但是当有数据被删除的话,自增列就不连续了.如果想查询出这个表的信息,并添加 ...

  8. SQL Server与Oracle对表添加列的不同点

    逛了博客园两年有余,不知道该发表些什么.要么觉得自己太菜,要么觉得要发的内容都可以搜索到,发表了还颇有抄袭味道.想想后都不得了之了. 搞了开发快一年了,有时候零零碎碎的东西需要整理一下,梳理后才能做到 ...

  9. pandas dataframe在指定的位置添加一列, 或者一次性添加几列,re

    相信有很多人收这个问题的困扰,如果你想一次性在pandas.DataFrame里添加几列,或者在指定的位置添加一列,都会很苦恼找不到简便的方法:可以用到的函数有df.reindex, pd.conca ...

随机推荐

  1. mysql 库操作、存储引擎、表操作

    阅读目录 库操作 存储引擎 什么是存储引擎 mysql支持的存储引擎 如何使用存储引擎 表操作 创建表 查看表结构 修改表ALTER TABLE 复制表 删除表 数据类型 表完整性约束 回到顶部 一. ...

  2. 一次cloudstack启动cloudstack-agent报错的处理过程

    http://www.bubuko.com/infodetail-2397888.html

  3. SGU 289. Challenging Tic-Tac-Toe

    注意一个问题就是不合法状态的判定.一个是点数不对,一个是X赢了,但是0接着下了一个子,一个是0赢了,但X也接着下了子,判断一下就行了. 做法是直接搜索,然后调参数...比较难懂的说. #include ...

  4. 软件包管理yum

    (1)yum基础源 1)国内yum源地址 mirrors.aliyun.com //阿里有基础源和epel源 mirrors.163.com 查看使用帮助 2)更换yum源为阿里云(Centos7为例 ...

  5. Java String lastIndexOf() 方法

    Java String lastIndexOf() 方法 测试代码 public class Test { public static void main(String[] args) { // -- ...

  6. 转:libFuzzer Tutorial(libFuzzer教程)

    转:https://github.com/google/fuzzer-test-suite/blob/master/tutorial/libFuzzerTutorial.md 本文在Ubuntu16下 ...

  7. web服务器解析漏洞总结(转)

    转:http://www.secpulse.com/archives/3750.html 解析漏洞总结 2015 /1/27 22:09 一.IIS 5.x/6.0解析漏洞 IIS 6.0解析利用方法 ...

  8. 【Go】windows下搭建go语言编译环境

    主要是协助杨哥做Kubernetes相关工作,由于Kubernetes和Docker都是由Go语言编写,因此改源码后还是需要go语言编译器来编译运行.所以打算先在windows上安装一下go语言环境. ...

  9. Beaglebone Black教程使用SSH通过USB和因特网连接Beaglebone Black

    Beaglebone Black教程使用SSH通过USB和因特网连接Beaglebone Black 使用SSH通过USB和因特网连接Beaglebone Black SSH是Secure Shell ...

  10. uva 10910(子集和问题)

    Marks Distribution Time limit: 3.000 seconds In an examination one student appeared in N subjects an ...