dポイントプレゼントキャンペーン実施中!

現在、SQLServer勉強中のものです。たびたびの質問ですいません。

sp_columnsというシステムストアドプロシージャで列情報が取得できますが、@table_nameでテーブルを、@table_ownerで所有者を指定できますよね。
さらに@table_qualifierでデータベース名を指定できると思っていたのですが、これは無理なのでしょうか。

ヘルプには「SQLServerでは、この列はデータベース名をあらわします」とあるのですが、現在、接続データベース以外のデータベースに格納されているテーブルの列情報を参照しようとすると「オブジェクト修飾子の一部になるデータベース名には、現在のデータベースを指定してください。」と表示されてしまいます。

例:TestDB1に接続してTestDB2内のテーブル指定
use TestDB1
sp_columns
@table_name=TestDB2Tbl,
@table_qualifier=TestDB2

A 回答 (2件)

他のシステムストアドプロシージャの心当たりはありません。



  No.1648536 質問:列名とそのデータ型
  http://oshiete1.goo.ne.jp/kotaeru.php3?q=1648536

にあるようにsyscolumns等のシステムテーブルから自前で情報を取得するか、ODBC経由の場合は接続文字列に"DATABASE={データベース名};"を追加して任意のデータベースに接続してからテーブル情報・列情報を取得するか、あるいはOLEDB経由でデータベース情報・テーブル情報・列情報を取得するか、というところではないでしょうか。
    • good
    • 0
この回答へのお礼

回答ありがとうございます。参考URLのSQLでデータベース・所有者・テーブル名を指定し、自在に列情報を取得できるようになりました。感謝いたします。

お礼日時:2005/09/26 18:31

sp_columnsの最初のほうに



  if @table_qualifier is not null
  begin
    if db_name() <> @table_qualifier
    begin /* If qualifier doesn't match current database */
      raiserror (15250, -1,-1)
      return
    end
  end

と書いてあり、raiserror (15250, -1,-1)は

"オブジェクト修飾子の一部になるデータベース名には、現在のデータベースを指定してください。"

を表示するので、@table_qualifierに現在のデータベースとnull以外は指定できないようです。
    • good
    • 0
この回答へのお礼

先日に続き、ご回答ありがとうございます。もう一つ質問させてください。sp_columns以外に他のデータベースの列情報が取れるようなシステムストアドプロシージャはないでしょうか。複数のシステムでデータベースの垣根を越えて、自在に、使用するテーブルの列情報を取得したいと考えており、いっそのこと「select * from TABLE」で欲しいテーブルの情報を全部とってきて、レコードセットでフィールドをチェックしたほうがいいのだろうか、と悩んでいます。データ件数が多いと相当負担も大きいと思うので、こちらもあまり使いたくない方法なのですが。

お礼日時:2005/09/23 11:13

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!