- ベストアンサー
sp_columnsでデータベース名指定できない?
- SQLServerのシステムストアドプロシージャであるsp_columnsでは、@table_qualifierでデータベース名を指定することはできません。
- 現在のデータベースを指定するオブジェクト修飾子には、接続データベース名を指定する必要があります。
- sp_columnsを使用して他のデータベースに格納されているテーブルの列情報を取得する場合は、接続データベースを一時的に変更する必要があります。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
他のシステムストアドプロシージャの心当たりはありません。 No.1648536 質問:列名とそのデータ型 http://oshiete1.goo.ne.jp/kotaeru.php3?q=1648536 にあるようにsyscolumns等のシステムテーブルから自前で情報を取得するか、ODBC経由の場合は接続文字列に"DATABASE={データベース名};"を追加して任意のデータベースに接続してからテーブル情報・列情報を取得するか、あるいはOLEDB経由でデータベース情報・テーブル情報・列情報を取得するか、というところではないでしょうか。
その他の回答 (1)
- xcrOSgS2wY
- ベストアンサー率50% (1006/1985)
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以外は指定できないようです。
お礼
先日に続き、ご回答ありがとうございます。もう一つ質問させてください。sp_columns以外に他のデータベースの列情報が取れるようなシステムストアドプロシージャはないでしょうか。複数のシステムでデータベースの垣根を越えて、自在に、使用するテーブルの列情報を取得したいと考えており、いっそのこと「select * from TABLE」で欲しいテーブルの情報を全部とってきて、レコードセットでフィールドをチェックしたほうがいいのだろうか、と悩んでいます。データ件数が多いと相当負担も大きいと思うので、こちらもあまり使いたくない方法なのですが。
お礼
回答ありがとうございます。参考URLのSQLでデータベース・所有者・テーブル名を指定し、自在に列情報を取得できるようになりました。感謝いたします。