2012-03-14 11 views
1

よく知っている投稿をチェックしましたが、これまでにはこれがカバーされていないことを願っています。TSQL DB名とスキーマの抽象度

私は現在の場所以外のデータベースでストアドプロシージャを呼び出す際に、DBとスキーマの名前を抽象化する方法を検討しています。次のように何か:

[データベース名]を実行し、[スキーマ] [storedProcedureName]

アイデアはDBとスキーマが実行時の要求に応じて提供することができるようになります。。。これを行う明白な方法は、動的SQLを使用することですが、私はそれを使用しているシステムのために大きなノー。この場合、誰もがDB名とスキーマを抽象化することを知っていますか?私が考えることができる唯一のオプションは、名前などを変数に格納し、実行呼び出しに組み込む方法やDBのインスタンスを格納する方法ですが、それが可能かどうかはわかりません。

フィードバックは役に立ちます。ありがとうございます。

答えて

0

私はあなたが説明するように、それを抽象化についてはよく分からないんだけど、1つのアイデアは、このような何かをするかもしれません(パラメータか何かのような?):

IF @db = 'dababase1' 
BEGIN 
    IF @schema = 'schema1' 
    BEGIN 
     EXECUTE database1.schema1.procedure 
    END 
    IF @schema = 'schema2' 
    BEGIN 
     EXECUTE database1.schema2.procedure 
    END 
    ... 
END 
IF @db = 'database2' 
BEGIN 
... 

あなたがデザインに知っておく必要があるだろうどのような可能性のあるデータベースとスキーマがあったのでしょうか...

0

なぜこのアプローチの背後にを理解するのは少し難しいです。ストアドプロシージャとは何ですか?これは、異なる接続文字列を使用してデータベースを変更する方が良いでしょうか?

あなたがTSQL文の内部でDBを切り替えたい場合は、USEコマンドを見て、私はあなたが多分のような構文を探しているのだと思いEXECUTE AS