背景:

在一个数据表中,数据表的表名命名如下:AA_UserDefineArticleDTO_XXXX_Ext,数据表有很多字段命名为:UserDefineArticleDTO_YYYYY,如下图所示。

先需要对表的字段进行重命名,批量修改列名称。 

编写下述sql procedure:

 

Drop procedure SetDtoExt
go
Create procedure SetDtoExt
@dtoOldName varchar(50),
@dtoNewName varchar(50),
@dbName varchar(50)
AS
    Declare @columnName varchar(128)
    Declare @newColumnName varchar(128)
    Declare @sql varchar(256)
    declare columnName_cursor cursor
    for select syscolumns.name,replace(syscolumns.name,@dtoOldName,@dtoNewName) FROM syscolumns
    WHERE syscolumns.id = object_id(@dbName+'.dbo.AA_'+@dtoOldName+'_Ext') and syscolumns.name like '%'+@dtoOldName+'%'
BEGIN
    open columnName_cursor
    fetch next from columnName_cursor into @columnName,@newColumnName
    while @@fetch_status=0
    begin
        --exec sp_rename 'AA_'+@dtoOldName+'_Ext.'+@columnName,@newColumnName,'COLUMN'
        --SET @sql='sp_rename'+' ''[AA_'+@dtoOldName+'_Ext].['+@columnName+']'','''+@newColumnName+''',''COLUMN''';
        --EXEC(@sql)
        SET @sql='sp_rename'+' ''AA_'+@dtoOldName+'_Ext.'+@columnName+''','''+@newColumnName+''',''COLUMN''';
        EXEC(@sql)
        fetch next from columnName_cursor into @columnName,@newColumnName
    end
    close columnName_cursor
    deallocate columnName_cursor
END

go
exec SetDtoExt 'UserDefineArticleDTO_0001','UseStatusDTO','UFTData90901_001';
  1. 在执行重命名操作时,注意需要添加引号,不过不添加引号就会报错!
  2. 表可以用方括号括起来,也可以不括起来。
  3. 在打开游标后需要添加fetch next from columnName_cursor into @columnName,@newColumnName,否者会陷入死循环!

欢迎大家交流!

 

 

 

posted on 2012-05-26 15:01  @version  阅读(410)  评论(0编辑  收藏  举报