簡體   English   中英

SQL比較數據庫之間的兩個存儲過程

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM