none
DB間でのユーザー定義テーブル型の利用について RRS feed

  • 質問

  • DB間でのユーザー定義テーブル型の利用について

    環境:SQL Server 2008 Enterprise Edition

    DB間で「ユーザ定義テーブル型」の利用ができず、
    そもそも機能的制限で利用できないのか、利用方法が悪いのかで悩んでいます。


    構成は下記の通りです。

    データベースが2つあります。
    • db1・・・ユーザ定義テーブル型を作成、それを引数にもつ「ストアドA」を作成
    • db2・・・DB1と同じ構造のユーザ定義テーブル型を作成

    db2にて、
    db2で作成したユーザ定義テーブル型で変数を作成し、「ストアドA」をコールします。
    USE db2
    DECLARE @udt MyUDT
    
    Exec db1.dbo.procA @udt
    実行すると、
    「メッセージ 206、レベル 16、状態 2、プロシージャ ProcA、行 0
    オペランド型の不整合: MyUDT は MyUDT と互換性がありません」
    
    となってしまいます。

    「ユーザ定義型」では、DB間で型の使用がうまくいくのですが、
    「ユーザ定義テーブル型」をDB間で利用する方法はないものでしょうか。

    参考:
      複数のデータベース間でのユーザー定義型の使用
      http://msdn.microsoft.com/ja-jp/library/ms178069.asp
    2010年2月9日 4:54

すべての返信

  • kobadesu さん、はじめまして。フォーラムのご利用ありがとうございます。

    下記の英語フォーラムの投稿によると、DB間のユーザー定義テーブル使用には制限があるようなので、
    橋渡しを行う新しいストアドプロシージャーを作ってラップしてみてはどうかというアドバイスがついています。

    Passing User Defined Table Type variable to Cross database stored procedure throws error
    http://social.msdn.microsoft.com/Forums/en-US/transactsql/thread/fc9aeec7-178b-41d0-b628-a8d98a23c276

    他に情報をお持ちの方がいらっしゃいましたら、是非情報をお寄せください。

    大した情報ではなくて申し訳ありませんが、今後ともよろしくお願いします。
    • 回答の候補に設定 木場 2010年2月16日 1:37
    2010年2月15日 9:31
  • 菊地俊介さん、ご回答ありがとうございます。

    教えていただいた参照先の内容を確認しました。
    下記の英語フォーラムの投稿によると、DB間のユーザー定義テーブル使用には制限があるようなので、
    橋渡しを行う新しいストアドプロシージャーを作ってラップしてみてはどうかというアドバイスがついています。
    やはり一時テーブル等を利用するようなことを考えないと、うまくいかないようですね。
    ユーザ定義テーブルは非常に便利なので、なにか良い方法があると良いんですけどね。

    情報どうもありがとうございました。

    2010年2月16日 1:32