sqlserver数据库,批量更改表名和字段的前缀
?
修改字段名思路:sp_rename '表名.字段名','新列名','column' declare @s varchar(8000) select @s=isnull(@s + char(10),'') + 'exec sp_rename ''[' + b.name + '].[' + a.name + ']'',''' + stuff(a.name,1,'fs_') + ''',''column''' from syscolumns a inner join sysobjects b on a.id=b.id where b.type='U' exec(@s) 其中,stuff(a.name,'fs_'),把列名,删除从第一位开始,后面的0个字符,然后在第一位插入fs_,相当于fs_+原始列名 ? 如果表和列过多,varchar(8000)放不下,需要用id n-m几次,或按id循环,或者用游标: declare @sql nvarchar(4000) declare @tablename nvarchar(100) declare @oldcolname nvarchar(100) declare @oldcolnameAddtn nvarchar(100) declare @newcolname nvarchar(100) declare @id int declare cursorCol cursor for ?select? a.id,a.name,b.name from syscolumns a inner join sysobjects b ?on a.id=b.id where b.type='U' and a.name<>'id' open cursorCol fetch next from cursorCol into @id,@oldcolname,@tableName while(@@FETCH_STATUS=0) begin set @oldcolnameAddtn=@tablename+'.'+@oldcolname set @newcolname='FS_'+@oldcolname set @sql= 'sp_rename '''+@oldcolnameAddtn+''','''+@newcolname+''',''column''' exec(@sql) fetch next from cursorCol into @id,@tableName end deallocate cursorCol ?sqlserver数据库,批量更改表名和字段的前缀,有若干表,ABC_admin,ABC_product,ABC_user,ABC_upload等,前缀都是ABC, 每个表里的字段名也是ABC开头,现在想把ABC改成EFG,如何能批量修改:use test go create table abc_1(abc_id int) create table abc_2(abc_xxid int) create table abc_aaa(abc_dd int) go --修改列名 declare @s varchar(8000) select @s=isnull(@s + char(10),3,'def') + ''',''column''' from syscolumns a inner join ( select name,id from sysobjects where xtype='u' and name like 'abc_%' escape('') ) b on a.id=b.id where a.name like 'abc_%' escape('') exec(@s) /* 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 column 已重命名为 'def_id'。 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 column 已重命名为 'def_xxid'。 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 column 已重命名为 'def_dd'。 */ --修改表名 exec sp_msForeachTable @command1=N'declare @s varchar(100);select @s=left(stuff(''?'',10,''def''),len(''?'')-8);exec sp_rename ''?'',@s',@whereand=' and name like ''abc_%'' escape('''')' /* 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 object 已重命名为 'def_1'。 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 object 已重命名为 'def_2'。 注意: 更改对象名的任一部分都可能破坏脚本和存储过程。 object 已重命名为 'def_aaa'。 */ gosql STUFF用法 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |