2010-01-05 21 views
6

我有一個數據庫,其中所有表格的前綴都是一組相同的字符。之所以這樣做,是因爲他們曾經在一個共享數據庫中設置了數百個其他表格的寵物項目。應用程序以及數據庫現在已經準備好移出這個階段,並準備好獨立出來。我想刪除每個表的前綴。有沒有更簡單的方法來做到這一點,而不是單獨右鍵單擊和重命名每個表?重命名數據庫中的所有表格

+1

我會創建一個新的數據庫,新的表格命名方案,並選擇數據。 –

+0

也看看這個 - 「大規模重命名錶和存儲過程」http://stackoverflow.com/questions/1098585/mass-renaming-of-tables-and-stored-procedures – Bratch

回答

2

你可以做一些像腳本整個數據庫一樣的東西,並對腳本進行字符串替換,在新數據庫上運行它,然後導入數據。這當然取決於您可以匹配要替換的字符串的程度。您可能也必須在應用程序中進行相應的更改。你總是可以在測試數據庫上嘗試這樣的事情,看看它是否可行。

在此看一看太 - Mass Renaming of Tables and Stored Procedures

一種方法具有一定的成本,另一個是類似我的建議。

+0

@Bratch +1更好地說出我所說的話。 – Hogan

+1

@Hogan是的,但不同。您的回答聽起來更像是實際編寫腳本來修改元數據。我並不是說你需要編寫腳本,只需將數據庫編寫爲SQL命令(右鍵單擊,任務,生成腳本)即可。執行查找/替換操作並將前綴替換爲空,然後在新數據庫上運行修改後的SQL。這將重新命名所有對視圖和sprocs中表的引用。快速查看由db腳本生成的SQL應該提供一個想法,看它能否正常工作。 – Bratch

4

您可以編寫腳本來查看元信息並對其進行更改,但這不會破壞所有SP和參數化查詢嗎?

+1

它會毀了一切 - 視圖等等。如果有SCHEMABINDING任何事情,那就必須先處理...... –

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.
  • 您將可以在任何存儲過程,函數,視圖,觸發器和重命名錶。
+0

這是一個很好的解決方案,因爲您可以在運行之前看到重命名腳本。 –

0

純粹從「替換右鍵單擊,重命名」透視圖(不重命名引用,過程,視圖等) - 混合一點點。獲取表的列表:

select name from sys.Tables 

複製和過去,到Emacs(或你喜歡的正則表達式的行編輯器),然後運行一個正則表達式行置換: 搜索\(xyz.*\)SP_RENAME 'xyz\1', '\1'; 這repalces表xyzFoo與富貴取代。將行粘貼回SQL Server並運行它。

相關問題