如何使用模式重命名一堆表?

时间:2012-06-06 13:43:40

标签: sql sql-server-2008

我有一大组数据库表,最初以前缀“tblXYZ123-”命名。我仍然希望表格带有前缀,因为这会将相关表格组合在一起但我想通过用更简单,更相关的前缀(如“td”)替换前缀来重命名这组表。

如何重命名表而不手动重命名每个文件?我希望有一个脚本或其他东西,但却找不到这样的工具。

2 个答案:

答案 0 :(得分:2)

您可以使用动态SQL和目录视图sys.tables

构建此脚本
DECLARE @sql NVARCHAR(MAX) = N'';

SELECT @sql += CHAR(13) + CHAR(10) 
  + 'EXEC sp_rename N''' + SCHEMA_NAME([schema_id])
  + '.' + name + ''', N''' + REPLACE(name, 'tblXYZ123-', 'td')
  + ''',N''OBJECT'';'
FROM sys.tables
WHERE name LIKE 'tblXYZ123-%';

PRINT @sql;
-- EXEC sp_executesql @sql;

如果您愿意,也可以使用光标,但我更喜欢上述内容 - 我可以在运行之前打印和预览脚本,例如:

DECLARE @t SYSNAME, @f NVARCHAR(511);

DECLARE c CURSOR LOCAL STATIC READ_ONLY FORWARD_ONLY
  FOR SELECT name, SCHEMA_NAME(schema_id) + '.' + name
    FROM sys.tables WHERE name LIKE 'tblXYZ123-%';

OPEN c;

FETCH NEXT FROM c INTO @t, @f;

WHILE @@FETCH_STATUS = 0
BEGIN
    SET @t = REPLACE(@t, 'tblXYZ123-', 'td');

    EXEC sp_rename @f, @t, N'OBJECT';

    FETCH NEXT FROM c INTO @t, @f;
END 

CLOSE c;
DEALLOCATE c;

答案 1 :(得分:0)

在我看来,最简单的方法是将表列表放在Excel的一列中。在下一栏中,输入新名称,大概使用类似 =“td”& mid(A1,11,1000)的公式作为新名称。在第三列中,输入公式“sp_rename”& A1&“”& A2。

复制公式,然后将第三列复制到SQL Server Management Studio并运行代码。

您还可以使用T-SQL中的游标或循环执行此操作。但是,我发现在Excel中生成这样的代码 - 一次性应用程序 - 通常是最快的方法。