如题,想在存储过程里面实现,要求表名、原列名、新列名均为变量,不考虑约束
网上找了一下,根据格式:sp_rename 'tablenames.[contact title]', 'new_title', 'COLUMN'
写了以下语句:
sp_rename '['+@tableid+'].['+@oldcolumnname+']','['+@newcolumnname+']','COLUMN'系统提示:消息 102,级别 15,状态 1,过程 SetTableColumn,第 16 行
'sp_rename' 附近有语法错误。
网上找了一下,根据格式:sp_rename 'tablenames.[contact title]', 'new_title', 'COLUMN'
写了以下语句:
sp_rename '['+@tableid+'].['+@oldcolumnname+']','['+@newcolumnname+']','COLUMN'系统提示:消息 102,级别 15,状态 1,过程 SetTableColumn,第 16 行
'sp_rename' 附近有语法错误。
EXEC('sp_rename ['+@tableid+'].['+@oldcolumnname+'],['+@newcolumnname+'],''COLUMN''')
-- 测试表
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
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
as
begin
exec ('sp_rename ['+@tbname+'].['+@oldcolname+']'',''['+@newcolname+']'',''COLUMN''' )
end
goexec my_proc 'tbname' , 'oldcolname' , 'newcolname'
@tableid 是表名?
sp_rename '['+@tableid+'].['+@oldcolumnname+']','['+@newcolumnname+']','COLUMN'
---------------------------
declare @sql varchar(50)
set @sql='exec sp_rename '''+ @tableid+ '.'+@oldcolumnname+''',''' + @newcolumnname+''',''column'''
exec(@sql)
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 行)*/
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