用别人的表,不知为何每个字段都加了个前缀,‘f_’
如表t的字段
f_id,f_name
,因为表很多,字段很多,需要用sql执行简单些,我这样写的--字段数,表名,标志值,字段名,表加字段名
declare @colum int,@tname varchar(50),@pos int,@posstr varchar(50),@cloname varchar(50),@tc varchar(50)
set @tname='t'
set @pos=1
--表中字段数
set @colum=(select count(name) from syscolumns where id=object_id(@tname) )while convert(int,@pos)<@colum
begin
--取出第@pos个字段名
set @posstr=convert(varchar(50),@pos )
                  --这里出错,exec附近有语法错误?
set @cloname =exec('select top 1 name from (select top '+@posstr+'  name from syscolumns where id=object_id('+@tname+') order by name)tt order by name desc')
--表名加字段名,如tablename.id
set @tc=@tname+'.'+@cloname
if len(@cloname)>2
begin
set @cloname=substring(@cloname,3,len(@cloname)-2)
exec   sp_rename   @tc,@cloname,'column' end

set @pos=@pos+1
end

解决方案 »

  1.   

    update tablename(表名)
    set columnname(需要修改的字段名)=stuff(columnname,1,2,'') '去掉所有字段前的f_
      

  2.   


    你把表名改成参数
    if object_id('[TB]') is not null drop table [TB]
    create table [TB]([f_姓名] varchar(4),[f_领取数量] int,[f_操作类型] varchar(4))
    insert [TB]
    select '张三',12,'领出' union all
    select '李四',1,'领出' union all
    select '张三',5,'退' union all
    select '陈军',3,'领出'select * from TB
    /*
    f_姓名 f_领取数量      f_操作类型 
    ---- ----------- ------ 
    张三   12          领出
    李四   1           领出
    张三   5           退
    陈军   3           领出(所影响的行数为 4 行)*/declare @s varchar(400)
    set @s=''
    select @s=@s+'EXEC sp_rename ''TB.['+name+']'', '''+replace(name,'f_','')+''', ''COLUMN'' '+char(10) from syscolumns where ID=object_id('TB') order by colid
    exec(@s)select * from TB/*
    姓名   领取数量        操作类型 
    ---- ----------- ---- 
    张三   12          领出
    李四   1           领出
    张三   5           退
    陈军   3           领出(所影响的行数为 4 行)*/
    drop table TB
      

  3.   

    http://www.cnblogs.com/wkpeng/archive/2009/07/17/1525703.html