2011-10-10 37 views
6

我比較兩個SQL服務器數據庫(分別爲開發和實時環境,SQL2005和SQL2008)以檢查兩者之間的差異。如果我爲每個數據庫生成一個腳本,我可以使用簡單的文本比較來突出顯示差異。如何對生成的SQL腳本的輸出進行排序?

問題是腳本需要採用相同的順序以簡化比較,避免存儲過程順序不同但內容相同的簡單差異。

所以,如果我生成這個從發展:

1: CREATE TABLE dbo.Table1 (ID INT NOT NULL, Name VARCHAR(100) NULL) 
2: CREATE TABLE dbo.Table2 (ID INT NOT NULL, Name VARCHAR(100) NULL) 
3: CREATE TABLE dbo.Table3 (ID INT NOT NULL, Name VARCHAR(100) NULL) 

這從現場:

1: CREATE TABLE dbo.Table1 (ID INT NOT NULL, Name VARCHAR(100) NULL) 
2: CREATE TABLE dbo.Table3 (ID INT NOT NULL, Name VARCHAR(100) NULL) 
3: CREATE TABLE dbo.Table2 (ID INT NOT NULL, Name VARCHAR(100) NULL) 

兩條相比較亮點線2和3不同,但他們實際上是相同的,只是生成腳本嚮導在實時環境的表2之前執行了table3。添加100個表格,存儲過程,視圖等,這很快就變成了一團糟。

我目前的選擇是:

  1. 手動比較
  2. 前的內容進行排序創建一個程序在一個特定的順序
  3. 找到一個免費的應用程序,排序生成的腳本來創建腳本
  4. 支付作爲其套件工具的一部分的產品
  5. (其他方式)

希望我只缺少說「按名稱排序腳本」的複選框,但我看不到任何這樣做。我認爲我不應該爲「排序輸出」選項或許多其他不需要的工具這樣簡單的事情付費,所以選項4應該是最後的選擇。

編輯 我有充分的機會,以兩個環境,但生活環境被鎖定和託管虛擬服務器上,具有遠程desktoping訪問現場的典型方式。我的首選是將我能做的事複製到那裏進行開發和比較。我可以爲數據庫中的每種對象生成腳本作爲單獨的文件(表格,SP,函數等)

+0

您可能在通過查找CREATE腳本中的文本差異來比較數據庫模式時遇到問題,但也許只是像使用Notepad2或其他東西來首先對所有行進行排序? –

+0

@Mike:如果他按字母順序對腳本中的所有行進行排序,他將如何分辨不同的對象是什麼? – codeulike

+0

任何文件比較工具,如「fc」.. –

回答

6

根據您的Visual Studio版本(如果有的話),可以這樣做輕鬆通過數據菜單,根據您的原意,您可以節省一些時間。

編輯:生成實際DB的,然後比較,如下圖所示的模式比較工具是比較兩個腳本文件相同的淨效果,你不必再擔心換行等

enter image description here

+0

我得到了OP想要比較模式創建腳本的感覺,而實際上並沒有要比較的實時數據庫。 –

+1

他可以運行這兩個腳本,讓他們創建兩個數據庫,然後比較模式:)相同的淨效果 – kd7

+0

我可以完全訪問這兩種環境,但不能從Visual Studio中訪問:Live託管在虛擬服務器上,並且(正確如此)被鎖定以防止外部訪問。創建兩個數據庫有點費用,但仍是另一種選擇。 –

0

這對腳本來說很難做到 - 因爲SQL傾向於按照對其有意義的順序(例如依賴順序)而不是按字母順序生成表/對象。

當您開始比較數據庫時會出現其他複雜情況 - 例如約束對象的名稱可能會隨機生成,因此同一約束可能在每個數據庫中具有不同的名稱。

你最好的選擇可能是選項(4)恐怕...一個虛擬的Red Gate Sql Compare - 免費30天的副本。我已經使用了很多,並且非常善於指出重要的差異。然後,它會生成一個腳本,使兩個模式重新同步。

編輯:或Visual Studio 2010旗艦版(或溢價)可以做到這一點顯然是 - 看KD7的答案

+0

vs2010溢價有這個內置,我敢肯定其他一些版本也有它 – kd7

+0

我不知道,這就是爲什麼我upvoted你的答案:) – codeulike

+0

是的,我從來沒有聽說過很多新聞,它是驚喜時我在那裏看到了哈 – kd7

2

Red_gate的SQLCompare是利用這一點,值得每一分錢的最好的事情。

0

我有類似的問題。我的數據庫是SQL Server 2008.我意識到,如果我通過對象資源管理器詳細信息生成腳本,那麼我會得到我正在查看名稱的那個命令。通過這種方式,我能夠比較兩個數據庫並找出它們的差異。

與此唯一的問題是,我不得不拿出單獨的腳本爲表/存儲過程,觸發器等

但我們可以很容易地進行比較。

1

您可以在某種程度上使用WinMerge來比較兩個生成的腳本時是否在其他地方找到這些行。我認爲它適用於更簡單的情況。

使用WinMerge v2.12.4.0 Unicode。請注意下面突出顯示的顏色用法。

下面是編輯的幫助 - >選項 - >比較 「啓用移動塊檢測」:

3.6。啓用移動的塊檢測 禁用(默認):WinMerge不會 檢測差異是否由於移動的行導致。

已啓用:WinMerge會嘗試檢測移動的行(在每個文件中的不同位置 )。移動的塊由Moved和 指定移動的不同顏色指示。如果顯示位置欄,則 中的對應差異位置在左側和右側位置欄 中用線連接。如果沒有太多,顯示移動的塊可以更容易地將文件中的更改可視化爲 。

有關示例,請參閱比較合併文件中的位置窗格說明和 合併文件。

相關問題