我有一大組最初以「tblXYZ123-」爲前綴命名的數據庫表。我仍然希望將表格加上前綴,因爲這樣可以將相關的表格組合在一起,但我想通過用更簡單,更相關的前綴(如「td」)替換前綴來重命名這組表格。如何使用模式重命名一堆表格?
如何在不手動重命名每個文件的情況下重命名錶格?我希望一個腳本或其他東西,但一直沒能找到這樣的工具。
我有一大組最初以「tblXYZ123-」爲前綴命名的數據庫表。我仍然希望將表格加上前綴,因爲這樣可以將相關的表格組合在一起,但我想通過用更簡單,更相關的前綴(如「td」)替換前綴來重命名這組表格。如何使用模式重命名一堆表格?
如何在不手動重命名每個文件的情況下重命名錶格?我希望一個腳本或其他東西,但一直沒能找到這樣的工具。
您可以使用動態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;
在我看來,最簡單的方法是將表格列表放入Excel中的列中。在下一列中,輸入新的名字,推測可能用=「td」& mid(A1,11,1000)作爲新名稱。在第三列中,輸入公式「sp_rename」& A1 &「」& A2。
複製公式,然後將第三列複製到SQL Server Management Studio並運行代碼。
你也可以在T-SQL中使用遊標或循環來做到這一點。但是,我發現在Excel中生成這樣的代碼 - 一次性應用程序 - 通常是最快的方法。
就我個人而言,我發現我發佈的查詢只比您必須運行生成要複製到Excel的列表的查詢複雜一點。它不使用任何顯式循環或光標。 –