zoukankan      html  css  js  c++  java
  • 如何用SQL语句在指定字段前面插入新的字段?

    如何用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旧表,把临时表复制或者改名过来,也可以实现原来需要的功能。但是这样如果需要修改的表一多,就会给数据库带来很多日志,而且可能会丢掉原来的字段关系。所以还是要看情况选择使用。
  • 相关阅读:
    java 调用摄像头拍照
    jenkins docker sop
    springboot多环境打包
    docker构建nginx
    docker 构建jdk-tomcat基础镜像
    docker 构建jar 镜像
    docker 构建springmvc war项目
    centos 启动jar脚本
    nginx dockerfile
    Starting zookeeper ... FAILED TO START
  • 原文地址:https://www.cnblogs.com/guanshan/p/guan20141204-1.html
Copyright © 2011-2022 走看看