29

変更したストアド プロシージャを DEV SQL Server 2005 データベース インスタンスから TEST インスタンスに手動で移行する必要があります。移行中の変更を除いて、データベースのスキーマは同じです。TEST インスタンスへの移行のために DEV データベースで変更されたストアド プロシージャをすばやく特定するにはどうすればよいですか?

いくつかのシステム テーブルに対してクエリを記述して、ストアド プロシージャ タイプのデータベース オブジェクトを表示し、最後に変更またはコンパイルされたデータで並べ替えることができると思いますが、よくわかりません。誰かが私に指摘できる無料のユーティリティがあるかもしれません。

前もって感謝します、

ボブ

4

7 に答える 7

69

推奨されなくなったsysobjectsを使用する代わりに、sys.proceduresを使用してください

select name,create_date,modify_date
from sys.procedures
order by modify_date desc

where句を自分で実行できますが、これにより、変更日の降順でリストされます

于 2008-09-17T16:44:35.387 に答える
11

このクエリを実行して、過去x日間に変更されたすべてのストアドプロシージャを見つけることができます。

SELECT name
FROM sys.objects
WHERE type = 'P'
    AND DATEDIFF(D,modify_date, GETDATE()) < X
于 2008-09-17T16:34:52.447 に答える
11

Bob OMalley はおそらくずっと前に彼の問題を解決しましたが、新しい読者がこれを役に立つと思うことを願っています。

スクリプトによって最適な結果が得られない特殊なケースがいくつかあります。

1 つは、開発環境でストアド プロシージャまたはその他のオブジェクトを削除することです。オブジェクトがそこに存在しなくなるため、システム ビューを使用してこれをキャッチすることはできません。

また、このアプローチがパーミッションなどの変更に対して機能するかどうかはよくわかりません。

このような場合は、サードパーティのツールを使用して、何も見逃されていないことを再確認することをお勧めします.

過去に同様のタスクにApexSQL Diffを使用して成功しましたが、1000 個以上のオブジェクトを含む大規模なデータベースでは非常にうまく機能しましたが、ここで既に言及されている SQL Compare または基本的に市場に存在する他のツールを使用しても問題ありません。

免責事項: 私はここで言及しているどのベンダーとも提携していませんが、勤務先の会社では両方のツール セット (Apex と RG) を使用しています。

于 2013-09-04T14:04:45.067 に答える
2

無料ではありませんが、Red-Gates SQL Compare toolを使用して良い経験をしました。それは過去に私のために働いた。現在の問題を解決するのに十分な無料試用版が利用可能です.

于 2008-09-17T16:32:17.570 に答える
1

次のコードスニペットも使用できます

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO
于 2008-09-17T16:36:31.397 に答える
0

データベース比較ツールはいくつかあります。私がいつも気に入っているのは、Red Gateによる SQLCompareです。

以下を使用して試すこともできます。

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

SQL 2000 では、ALTER を使用しても日付が正しく更新されなかったため、常に機能するとは限りませんでしたが、2005 年には問題が修正されたと思います。

ただし、私は自分で SQL 比較ツールを使用しているため、その方法を 100% 保証することはできません。

于 2008-09-17T16:40:38.237 に答える
0

次のタイプのクエリを使用して、変更されたストアド プロシージャを見つけることができます。必要に応じて、7 から任意の数を使用できます。

SELECT name
    FROM sys.objects
    WHERE type = 'P'
        AND DATEDIFF(D,modify_date, GETDATE()) < 7
于 2008-09-17T16:33:34.210 に答える