2011-07-18 11 views
2

SQL Server 2008でプログラマビリティオブジェクトを検証する方法はありますか?T-SQLプログラマビリティオブジェクトの検証

私は、他のプログラマビリティオブジェクト(テーブルだけでなく)に依存する〜500のプログラマビリティオブジェクトを持つデータベースを持っています。

リファクタリングを行うと、変更によって壊れている他のオブジェクトを見つけるのは非常に困難です。

CREATE FUNCTION [dbo].[GetSomeText]() RETURNS nvarchar(max) AS BEGIN RETURN 'asdf' END 

/* uses "GetSomeText()" function */ 
CREATE FUNCTION [dbo].[GetOtherText]() RETURNS nvarchar(max) AS BEGIN RETURN [dbo].[GetSomeText]() + '-qwer' END 

は今、私はいくつかのリファクタリングを行う(追加パラメータ@NumGetSomeText()関数に):たとえば、私は...

データベースの

元の状態パラメータの数を変更した場合

ALTER FUNCTION [dbo].[GetSomeText](@Num int) RETURNS nvarchar(max) AS BEGIN RETURN 'asdf' + CAST(@Num as nvarchar(max)) END 

を今すぐ必要なパラメータを指定しないでGetSomeText()関数を呼び出すため、関数GetOtherText()が壊れています。

このエラーに関する情報を取得する手段はありますか?

現在、すべてのプログラマビリティオブジェクトをALTERとしてスクリプトを実行し、エラーをチェックします。この方法はあまりに複雑すぎるように見えます(T-SQLの環境では使いにくい)。

EDIT:回答を

ありがとう!私はすべてのオブジェクトの依存またはリストを取得する方法を知っています。 問題はオブジェクトのボディをチェックすることです。依存関係がある場合は、ALTERスクリプトを実行するよりも正当性をチェックする方法がありますか?

答えて

1

おそらく、自動データベース開発者/単体テストの自動導入を試すことができます。

500個のSQLオブジェクトを使用すると、戻ってくることが面倒で、それらのすべてに「レトロフィット」する必要があります。最良のアプローチは、既存のAPIのリファクタリング/変更の必要性/新しいSQLオブジェクトの作成時に、これらのテストを段階的に作成することです。

これらの自動テストは、継続的な統合アプローチの一環として含めることができます。既存の依存関係を見つける問題が残っていることに注意してください。しかし、十分なテストカバレッジが得られたら、導入された急激な変化をテストで強調しなければなりません。

私は使用であるかもしれないテストツールを作成している - しかし、そこに他人アウトの数があります。

http://dbtestunit.wordpress.com/

+0

私はautomaticaly生成されたテストと一緒に行きます。ありがとう! – TcKs

2

私は依存関係を見つける方法がないと思います。 - 手順とFN - スカラー関数

select OBJECT_DEFINITION(o.object_id) as objectDefinition, * 
    from sys.objects o 
    where o.type in ('P', 'FN') 
    and OBJECT_DEFINITION(o.object_id) like '%GetSomeText%' 

o.type in ('P', 'FN') Pに検索を制限します:あなたは、しかし、あなたがこのように変更しているオブジェクトの名前を参照するすべてのものを見つけることができます。 OBJECT_DEFINITIONの詳細を確認してください:http://msdn.microsoft.com/en-us/library/ms176090.aspx

0

sp_dependsを使用するのが最も簡単な方法です。このは機能を持つ作業を行いますが、あなたは右のDBコンテキストであることを確認する必要があります。これは、それが持っている機能、ストアドプロシージャ、テーブル、またはビューであるかどうかをあなたに任意のオブジェクトを表示します

USE MyDatabase 
EXEC sp_depends @objname = N'dbo.FunctionName' 

リストされたオブジェクトの依存関係

これはデータベース間の依存関係では必ずしも正確ではありませんのでご注意ください。

+0

は、実際に、でsp_dependsのみ機能/ストアドプロシージャで使用されるテーブルを返します。ドキュメントをチェックしてください:http://msdn.microsoft.com/en-us/library/ms189487.aspx – Milimetric

+1

@milimetric - あなたはそれを実行しようとしましたか?私は2008 r2データベースの関数をテストし、その関数を呼び出す関数を返しました。 – JNK

+0

はい、私は2008 r2でストアドプロシージャを試しました。それを参照するストアドプロシージャは返されません。 Hm ... – Milimetric

関連する問題