2012-06-25 12 views
-1

假設我有五個表a,b,c,d,e和十個存儲過程對它們進行操作。所以,現在我想編寫一個存儲過程或將檢查所有這些表列名稱和存儲過程列名稱(在此表中操作)的所有同步,如果不同步將引發錯誤並停止進一步做任何操作,直到它固定。我可以從信息模式中獲取列名,並檢查表是否同步。但對於存儲過程,我應該怎麼做?如何同步在sql server中對它們進行操作的不同表格列名稱和存儲過程?

回答

0

對於比對錶結構,你可以使用

INFORMATION_SCHEMA.COLUMNS

對於做SP比較,你可以做到這一點通過散列(哈希必須是兩個源/目標相同) :

declare @spname sysname 
declare @spdefinition varchar(max) 
declare @hashedVal varbinary(4000) 

set @spname = '<Your sp name here>' 

set @spdefinition = (SELECT OBJECT_DEFINITION (OBJECT_ID(@spname)))  
set @hashedVal = (select HashBytes('SHA1', @spdefinition)) 


select @hashedVal 
+0

謝謝大衛,我正在嘗試執行 – MSU

+0

你能否給我一個簡短的介紹或文章或資源從哪裏我ca n詳細瞭解散列實現,因爲我從來沒有在tsql中實現過散列,因此 – MSU

+0

基本上,如果程序具有相同的散列值,它們將同步。將其視爲您程序的「簽名」。但是,我必須補充一點,你被迫做過程比較的事實表明你的工作方式有問題:你應該使用一個合適的版本工具,比如subversion,並且從這個源碼建立你的數據庫。 –

相關問題