当前位置:  数据库>sqlserver

使用sql语句在指定字段前面插入新的字段的方法

    来源: 互联网  发布时间:2014-08-29

    本文导语:  sql语句如下:   代码示例: 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(s...

sql语句如下:
 

代码示例:

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)
--by www.

--关闭修改系统表的开关
EXEC sp_configure 'allow updates',0 RECONFIGURE WITH OVERRIDE
go

调用示例:
exec addcolumn '表名','新列名','新列类型',加到第几个位置

例如:
 

代码示例:
exec addcolumn 'test','id2','char(10)',2

说明:将id2这个列加到表test的第二个位置,类型是char(10)。


    
 
 

您可能感兴趣的文章:

  • 类的方法和实例方法,类字段和实例字段有什么不同,在使用上?
  • 使用PreparedStatement向表插入数据的时候,如果一个字段是自动增长的,应该怎么办呀???
  • MySQL可以使用斜线来当字段的名字
  • linux 下使用 FREETDS 访问数据库 image 字段的问题, 仅能读取 64K ,超出部分读取不到?
  • linux上使用C++如何处理utf-8编码的字段
  • SQL SERVER使用REPLACE将某一列字段中的某个值替换为其他的值
  • c#只读字段和常量的区别,以及静态构造函数的使用实例
  • MYSQL中有关SUM字段按条件统计使用IF函数(case)问题
  • mysql中insert与select的嵌套使用解决组合字段插入问题
  • c语言中位字段与结构联合的组合使用详解
  • oracle关键字作为字段名使用方法
  • oracle使用sql语句增加字段示例(sql删除字段语句)
  • Hibernate,Oracle视图中字段小数点位数使用注意
  • 求一个使用tcp协议传送类似数据库表的二维数组的例子。每条记录上的字段数据类型不一定一样。
  • 请问SHELL中有能根据模式直接抽取指定字段的内置命令吗?不能使用awk等工具的!
  • 解析如何使用反射调用类型成员 方法,字段,属性
  • oracle 使用sql获取数据库表、表的字段的多种方法
  • 在WCF数据访问中使用缓存提高Winform字段中文显示速度的方法
  • 在MySQL字段中使用逗号分隔符的方法分享
  • 解析使用jdbc,hibernate处理clob/blob字段的详解
  • oracle数据库删除数据Delete语句和Truncate语句的使用比较
  • c#入门之分支语句使用方法(三元运算符、if语句、switch语句)
  • UNIX/LINUX 在case语句里使用?
  • 编写so时,使用了“打开设备语句”。
  • java switch语句使用注意的四大细节
  • 怎样使jbuilder7能使用import javax.servlet.http.*;语句?
  • Oracle中SQL语句连接字符串的符号使用介绍
  • 关于java中执行sql语句使用order by的问题!
  • JAVA基础 语句标签的合法使用,以及{}语句块到底有什么用?
  • 使用php语句将数据库*.sql文件导入数据库
  • 将oracle的create语句更改为alter语句使用
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 在windows下使用虚拟机运行linux,在不插入网线的状态下可不可以使用smb服务
  • 使用存储过程实现循环插入100条记录
  • fedora 中插入u盘,使用后,如何切断u盘的电源,这样u盘不带电操作,就像windows中的那样
  • 请问大家使用VIM的时候如何输入括号和标签?插入模式如何移动?
  • 问题:在linux系统中,怎么使用shell脚本,在文件的第三行和第四行之间新增一行(插入一段字符,或者一个变量的值)?
  • 使用C#实现在word中插入页眉页脚的方法
  • 使用SQL Server 获取插入记录后的ID(自动编号)
  • php使用反射插入对象示例分享
  • codeigniter使用技巧批量插入数据实例方法分享
  • asp.net 使用SqlBulkCopy极速插入数据到 SQL Server
  • python文件读写并使用mysql批量插入示例分享(python操作mysql)
  • python使用win32com在百度空间插入html元素示例
  • python数据库操作常用功能使用详解(创建表/插入数据/获取数据)
  • 怎么使用ResultSet.insertRow()向mysql插入数据???
  • 請教Jtable的使用,如何編程插入一行,如何設置和取得任意單元格的數据?最好可以給個例程序.
  • C++ I/O 成员 tellg():使用输入流读取流指针
  • 在测试memset函数的执行效率时,分为使用Cash和不使用Cash辆种方式,该如何控制是否使用缓存?
  • C++ I/O 成员 tellp():使用输出流读取流指针
  • 求ibm6000的中文使用手册 !从来没用过服务器,现在急需使用它,不知如何使用! 急!!!!!
  • Python不使用print而直接输出二进制字符串
  • 请问:在使用oracle数据库作开发时,是使用pro*c作开发好些,还是使用库函数如oci等好一些啊?或者它们有什么区别或者优缺点啊?
  • Office 2010 Module模式下使用VBA Addressof
  • 急求结果!!假设一个有两个元素的信号量集S,表示了一个磁带驱动器系统,其中进程1使用磁带机A,进程2同时使用磁带机A和B,进程3使用磁带机B。
  • windows下tinyxml.dll下载安装使用(c++解析XML库)
  • c#中SAPI使用总结——SpVoice的使用方法
  • tcmalloc内存泄露优化c++开源库下载,安装及使用介绍
  • 使用了QWidget的程序,如何使用后台程序启动它?
  • sharepoint 2010 使用STSNavigate函数实现文件下载举例
  • 共享内存一般是怎么使用的,是同消息队列配合使用么
  • 使用libpcap读取tcpdump抓取的文件并解析c代码实例
  • Jsp可否使用带有GUI的JavaBean,如何使用?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3