5

特定のストアドプロシージャのセット(SQL Server 2000)を解析し、その中で使用されているすべてのテーブルと関連する列を取得できるアプリケーションはありますか。ストアドプロシージャには、さまざまなデータベースのテーブルを含めることができます。

出力はTableAcolumnAcolumnCcolumnDのようになります

TableB columnE columnF columnG

Database Edition GDRを使用して小さなアプリケーションを作成しました。興味のある方は、http://tsqlparsergdr.codeplex.comを参照してください。

4

6 に答える 6

2

具体的な解決策ではありませんが、一連の考え方です。

可能性のある解決策として sysdepends を検討しましたが、すべての依存オブジェクト情報を格納する点で信頼性が低いことで有名です。

しかし、Lex/Yacc から派生したものはどうでしょうか? いくつかの商用パーサーがあります。

http://www.sqlparser.com/download.php

オープンソースの実装は探していませんが、そのルートを探すと思います。検索を開始した方法は次のとおりです。

http://www.google.com/search?hl=ja&q=sql+lex+yacc+parse

ANSI SQL の BNF 構文は、次の場所にあります。

http://savage.net.au/SQL/

選択した lex 実装を使用すると、これは比較的単純なエンジニアリングの問題のように見えます。(ただし、MS SQL 拡張機能をサポートしたい場合は多少の手間がかかります)

于 2008-11-12T07:29:02.357 に答える
1

sp_depends私にとっては完璧に機能しました。変更によって影響を受ける可能性のあるテーブルまたはSPが表示されました

于 2010-08-29T23:44:16.680 に答える
1

SHOWPLAN_ALL設定を使用して、出力を解析できます。

于 2008-11-19T15:51:20.790 に答える
1

現在のニーズを満たすために、正規表現を使用して小さなアプリケーションを作成することにしました。

ご回答ありがとうございます。

于 2008-12-19T16:06:10.603 に答える
0

sp_depends が役立つはずです

于 2008-11-19T18:33:13.367 に答える
-1

プログラムで (開発環境で)ストアド プロシージャを呼び出し結果の列を取得できます。挿入および更新プロシージャの呼び出しを避けるために、命名規則があるかもしれません。適切なパラメーターを設定する方法も見つける必要があります。

注: 100% 信頼できるソリューションは技術的に不可能だと思います。これは、ストアド プロシージャ (できる) のしくみのためです。

この例を見てください:

[...]
@MyDate datetime

AS

    IF (day(@MyDate) = 1)
    BEGIN
        SELECT * FROM MyFirstTable
        RETURN
    END

    IF (@MyDate > getdate())
        SELECT MyID, MyText FROM MySecondTable WHERE ADate > @MyDate
    ELSE
        EXEC Other_StoredProcedure @MyType, @MyDate

したがって、2 つの問題があります。結果の列が異なる可能性があり、他のストアド プロシージャを再帰的にたどる必要があります。

于 2008-11-12T07:55:13.803 に答える