2

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

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

4

2 回答 2

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;
于 2012-06-06T13:53:06.537 回答
0

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

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

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

于 2012-06-06T13:55:42.497 回答