2012-06-06 22 views
2

我有一大組最初以「tblXYZ123-」爲前綴命名的數據庫表。我仍然希望將表格加上前綴,因爲這樣可以將相關的表格組合在一起,但我想通過用更簡單,更相關的前綴(如「td」)替換前綴來重命名這組表格。如何使用模式重命名一堆表格?

如何在不手動重命名每個文件的情況下重命名錶格?我希望一個腳本或其他東西,但一直沒能找到這樣的工具。

回答

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; 
0

在我看來,最簡單的方法是將表格列表放入Excel中的列中。在下一列中,輸入新的名字,推測可能用=「td」& mid(A1,11,1000)作爲新名稱。在第三列中,輸入公式「sp_rename」& A1 &「」& A2。

複製公式,然後將第三列複製到SQL Server Management Studio並運行代碼。

你也可以在T-SQL中使用遊標或循環來做到這一點。但是,我發現在Excel中生成這樣的代碼 - 一次性應用程序 - 通常是最快的方法。

+0

就我個人而言,我發現我發佈的查詢只比您必須運行生成要複製到Excel的列表的查詢複雜一點。它不使用任何顯式循環或光標。 –