• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:sp_columnsでデータベース名を指定できません)

sp_columnsでデータベース名指定できない?

このQ&Aのポイント
  • SQLServerのシステムストアドプロシージャであるsp_columnsでは、@table_qualifierでデータベース名を指定することはできません。
  • 現在のデータベースを指定するオブジェクト修飾子には、接続データベース名を指定する必要があります。
  • sp_columnsを使用して他のデータベースに格納されているテーブルの列情報を取得する場合は、接続データベースを一時的に変更する必要があります。

質問者が選んだベストアンサー

  • ベストアンサー
  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.2

他のシステムストアドプロシージャの心当たりはありません。   No.1648536 質問:列名とそのデータ型   http://oshiete1.goo.ne.jp/kotaeru.php3?q=1648536 にあるようにsyscolumns等のシステムテーブルから自前で情報を取得するか、ODBC経由の場合は接続文字列に"DATABASE={データベース名};"を追加して任意のデータベースに接続してからテーブル情報・列情報を取得するか、あるいはOLEDB経由でデータベース情報・テーブル情報・列情報を取得するか、というところではないでしょうか。

lovesens
質問者

お礼

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

その他の回答 (1)

  • xcrOSgS2wY
  • ベストアンサー率50% (1006/1985)
回答No.1

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以外は指定できないようです。

lovesens
質問者

お礼

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

関連するQ&A