[英]Compare code between two stored procedures in two different databases in SQL Server
[英]SQL Comparing two Stored procedures between databases
我有相同數據庫的兩個版本,需要在它們之間添加一些對象(存儲過程,視圖等)。
實際上是使用SQLDMO-SQLSMO檢索每個對象的文本,然后執行文本比較。 這是有效的,但是如果我有更多棕褐色的1000多個對象,則最多會花費很長時間。
我的問題是。 有一種簡單的方法可以執行此比較嗎? 也許在數據庫上生成了MD5密鑰?
為什么不直接從SQL Server直接查詢定義,而又不使用管理對象呢?
SELECT
sysobjects.name AS [Object Name]
,(CASE sysobjects.xtype
WHEN 'P' THEN 'Stored Procedure'
WHEN 'TF' THEN 'Function'
WHEN 'TR' THEN 'Trigger'
WHEN 'V' THEN 'View' END) AS [Object Type]
,syscomments.text AS [Object Definition]
FROM
sysobjects
JOIN
syscomments
ON
sysobjects.id = syscomments.id
WHERE
sysobjects.xtype in ('P', 'TF', 'TR', 'V')
AND
sysobjects.category = 0
我是針對我這里的數據庫運行的。 它在0.6秒內返回了約1,500個定義。 如果對每個服務器運行該命令以收集所有定義,則可以在一個大循環中對對象名稱,類型和定義進行比較。
在內存方面,這將是一項昂貴的操作,但是應該很快。 大多數CPU時間將花費在進行實際的字符串比較上。
至於您可以比較的有關“鑰匙”的其他問題,我所知道的沒有這樣的哈希值或等效值。 在sys.syscomments
表中,您具有ctext
列(SQL定義的原始字節)和text
列,它們是這些字節的文本表示形式。
僅供參考:如果您具有Visual Studio 2010 Premium或更高版本,則有一個內置的Schema Compare工具可以為您完成所有這些工作。 還有Open DBDiff或許多其他免費的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.