如题,想在存储过程里面实现,要求表名、原列名、新列名均为变量,不考虑约束
网上找了一下,根据格式:sp_rename 'tablenames.[contact title]', 'new_title', 'COLUMN'
写了以下语句:
sp_rename '['+@tableid+'].['+@oldcolumnname+']','['+@newcolumnname+']','COLUMN'系统提示:消息 102,级别 15,状态 1,过程 SetTableColumn,第 16 行
'sp_rename' 附近有语法错误。

解决方案 »

  1.   

    exec sp_rename   '['+@tableid+'].['+@oldcolumnname+']'',''['+@newcolumnname+']'',''COLUMN''' 
      

  2.   

    exec sp_rename '['+@tableid+'].['+@oldcolumnname+']'',''['+@newcolumnname+']'',''COLUMN''' 
      

  3.   

    exec ('sp_rename '+'['+@tableid+'].['+@oldcolumnname+']'',''['+@newcolumnname+']'',''COLUMN''' )
      

  4.   

    既然是用变量,那就得用动态SQL,试下这个行不行:
    EXEC('sp_rename ['+@tableid+'].['+@oldcolumnname+'],['+@newcolumnname+'],''COLUMN''')
      

  5.   

    exec ('sp_rename ['+@tableid+'].['+@oldcolumnname+']'',''['+@newcolumnname+']'',''COLUMN''' )
      

  6.   

    exec ('sp_rename '+'['+@tableid+'].['+@oldcolumnname+']'',''['+@newcolumnname+']'',''COLUMN''' )
      

  7.   


    -- 测试表
    create table tmp_a (col1 char)
    godeclare @tb varchar(32), @col varchar(32), @new varchar(32)
    -- 测试数据
    set @tb = 'tmp_a'
    set @col = 'col1'
    set @new = 'id'declare @sql varchar(512), @oldname varchar(64), @newname varchar(64)
    set @oldname = @tb+'.'+@col
    set @newname = @tb+'.'+@new
    exec sp_rename   @oldname,@newname
    go
    drop table tmp_a 
    go
      

  8.   

    create table   a(
    tiemr   datetime,
    vchar   varchar(4)
    ) EXEC sp_rename 'a.tiemr2', 'tiemr', 'column'select * from adeclare @tablename varchar(10),@columnname1 varchar(10),@columnname2 varchar(10)
    declare @sql varchar(8000)
    select @tablename='a',@columnname1='ID',@columnname2='ID2'
    set @sql= ''''+@tablename+'.'+@columnname1+''''+','+''''+@columnname2+''''+','+'''column'''
    exec ('exec sp_rename '+@sql)select * from a
      

  9.   

    create procedure my_proce @tbname varchar(10), @oldcolname varchar(10) , @newcolname varchar(10)
    as 
    begin
      exec ('sp_rename ['+@tbname+'].['+@oldcolname+']'',''['+@newcolname+']'',''COLUMN''' )
    end
    goexec my_proc 'tbname' , 'oldcolname' , 'newcolname' 
      

  10.   

    exec sp_rename '['+@tableid+'].['+@oldcolumnname+']','['+@newcolumnname+']'
    @tableid 是表名?
      

  11.   


    sp_rename   '['+@tableid+'].['+@oldcolumnname+']','['+@newcolumnname+']','COLUMN' 
    ---------------------------
    declare @sql varchar(50)
    set @sql='exec sp_rename '''+ @tableid+ '.'+@oldcolumnname+''',''' + @newcolumnname+''',''column'''
    exec(@sql)
      

  12.   

    create table tb (id int )
    go
    select * from tb
    declare @tableid nvarchar(10),@oldcolumnname nvarchar(10),@newcolumnname nvarchar(10)
    set @tableid = N'tb'
    set @oldcolumnname = N'id'set @newcolumnname = 'iid'
    exec ('exec sp_rename  ''['+@tableid+'].['+@oldcolumnname+']'' ,''[' + @newcolumnname+']''' )select * from tbdrop table tb/*id          
    ----------- (所影响的行数为 0 行)注意: 更改对象名的任一部分都可能破坏脚本和存储过程。
    column 已重命名为 '[iid]'。
    [iid]       
    ----------- (所影响的行数为 0 行)*/
      

  13.   


    create table tab 
    (
    a int ,
    b int
    )
    go
    declare @tableid varchar(20)
    set @tableid='tab'
    declare @oldcolumnname varchar(20)
    set @oldcolumnname='a'
    declare @newcolumnname varchar(20)
    set @newcolumnname='aaa'
    exec('exec sp_rename '''+ @tableid+ '.'+@oldcolumnname+''',''' + @newcolumnname+''',''column''')
    go
    select * from tab
    drop table tab
    go