重命名数据库中的所有表

时间:2010-01-05 19:06:14

标签: sql-server sql-server-2005

我有一个数据库,其中所有表都以一组相同的字符作为前缀。这样做是因为有一次他们在一个共享数据库中为宠物项目设置了数百个其他表。现在,应用程序以及数据库已准备好从该阶段移出,并准备好自己运行。我想删除每个表的前缀。有没有更简单的方法来执行此操作而不是单击右键并重命名每个表?

5 个答案:

答案 0 :(得分:9)

select 'exec sp_rename @objname=' + name + ', @newname=' + replace(name ,'prefixedchars', '')
from sysObjects
where type = 'U'

此结果将类似于:

exec sp_rename @objname=prefixedcharsTable1, @newname=Table1
exec sp_rename @objname=prefixedcharsTable2, @newname=Table2
exec sp_rename @objname=prefixedcharsTable3, @newname=Table3
etc... for each table in your db

您所要做的就是将这些语句复制到新的查询窗口并运行。

警告:

  • 您将收到如下警告信息:Caution: Changing any part of an object name could break scripts and stored procedures.
  • 您必须在任何存储过程,函数,视图和触发器中重命名表。

答案 1 :(得分:4)

您可以编写一个脚本来查看元信息并进行更改,但这不会破坏您的所有SP和参数化查询吗?

答案 2 :(得分:2)

您可以执行类似脚本整个数据库的操作,并在脚本上执行字符串替换,在新数据库上运行它,然后导入数据。这当然取决于您可以匹配要替换的字符串的程度。您可能还必须在应用程序中进行相应的更改。你总是可以在测试数据库上尝试这样的东西,看它是否会起作用。

看看这个 - Mass Renaming of Tables and Stored Procedures

一种方法有一些成本,另一种方法与我的建议类似。

答案 3 :(得分:0)

首先,编写一个具有表名参数的存储过程,并使用字符串解析和ALTER TABLE从指定的表中删除前缀。

然后,使用sp_MSforeachtable为每个表调用该过程。

参考:http://weblogs.sqlteam.com/joew/archive/2007/10/23/60383.aspx

答案 4 :(得分:0)

纯粹来自“替换右键,重命名”的观点(不重命名参考,程序,视图等) - 混合一点。获取表格列表:

select name from sys.Tables

将其复制并传递到emacs(或您最喜欢的正则表达式行编辑器)并运行正则表达式行替换: 搜索\(xyz.*\)并替换为SP_RENAME 'xyz\1', '\1'; 这用foo重新表格xyzFoo。将这些行粘贴回SQL Server并运行它。