zoukankan      html  css  js  c++  java
  • 用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)    
    --------------------------------------------------    
    --关闭修改系统表的开关    
    EXEC     sp_configure     'allow     updates ',0         RECONFIGURE     WITH     OVERRIDE    
    go    
     
     
    调用方法:    
    exec     addcolumn     '表名 ', '新列名 ', '新列类型 ',加到第几个位置    
    如:    
    exec     addcolumn     'test ', 'id2 ', 'char(10) ',2    
    表示将id2这个列加到表test的第二个位置,类型是char(10)。

  • 相关阅读:
    git常用命令
    thinkjs框架发布上线PM2管理,静态资源访问配置
    登陆服务器提示“You need to run "nvm install N/A" to install it before using it.”
    CentOS 7.x 用shell增加、删除端口
    CentOS 7.X 安全手记
    Centos 7.x nginx隐藏版本号
    centos7磁盘挂载及取消
    CentOS 7.4上网速度慢,修改DNS!
    Centos7.4 安装Docker
    Nodejs 使用log4js日志
  • 原文地址:https://www.cnblogs.com/dragonstreak_1/p/2570499.html
Copyright © 2011-2022 走看看