web-dev-qa-db-ja.com

SQL Serverで最近変更されたストアドプロシージャをすばやく特定する方法

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

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

前もって感謝します、

ボブ

22
Bob OMalley

推奨されないsysobjectsを使用する代わりに、sys.proceduresを使用します

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

where句は自分で実行できますが、これにより、変更日が降順に並べられます。

59
SQLMenace

ボブ・オマリーはおそらく彼の問題をずっと前に解決したでしょうが、新しい読者がこれが役に立つことを願っています。

スクリプトが最適な結果をもたらさない場合があるいくつかの特殊なケースがあります。

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

また、このアプローチがアクセス許可などの変更に対応できるかどうかもよくわかりません。

そのような場合、何も見落とされていないことを再確認するためだけにサードパーティのツールを使用するのが最善です。

私は過去に同様のタスクに ApexSQL Diff を使用して成功しましたが、1000以上のオブジェクトを持つ大規模なデータベースでは非常にうまく機能しましたが、ここですでに説明したSQL Compareまたは基本的には他のすべてのSQL Compareで失敗することはありません市場に存在するツール。

免責事項:私はここで言及しているベンダーとは関係ありませんが、私は働いている会社で両方のツールセット(ApexとRG)を使用しています。

11
Ron Biggs

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

DECLARE @X INT = 30
SELECT name
FROM sys.objects
WHERE type = 'P'
    AND DATEDIFF(D,modify_date, GETDATE()) < @X
10
Jason Stevenson

私は無料ではありませんが、Red-Gates SQL Compare tool を使用して良い経験をしました。以前はうまくいきました。彼らはあなたの現在の問題を解決するのに十分かもしれない無料トライアルを利用できます。

2
Craig

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

USE AdventureWorks2008;

GO

SELECT SprocName=name, create_date, modify_date

FROM sys.objects

WHERE type = 'P' 

AND name = 'uspUpdateEmployeeHireInfo'

GO
1
RBS

次のタイプのクエリを使用して、変更されたストアドプロシージャを検索できます。必要に応じて、7以外の任意の数を使用できます。

SELECT name
    FROM sys.objects
    WHERE type = 'P'
        AND DATEDIFF(D,modify_date, GETDATE()) < 7
0
RBS

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

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

SELECT name
FROM sys.objects
WHERE modify_date > @cutoffdate

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

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

0
Tom H