2017-03-06 6 views
0

SQLサーバーで列の種類を取得しようとしています。 フルテーブルパス名を使用して列の種類を取得

SELECT DATA_TYPE 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name'; 

しかし、それは

SELECT DATA_TYPE 
    FROM INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = '[database_name].[dbo].[table_name]' and COLUMN_NAME = 'column_name'; 

これは、異なるデータベースにあるストアドプロシージャの一部であり、私のことができるようにしたいと思いますでは動作しません:私はこれがうまく機能することを知っています完全なパス名を渡して、私が入っているどのデータベースからでも実行できるようにしてください。

+0

テーブル名は、スキーマとデータベースのない名前です。 'INFORMATION_SCHEMA'はデータベース内(サーバではない)なので*あなたが望むことはできません。 'OBJECT_ID'が役に立ちます。 –

+0

あなたが望むデータベースから 'INFORMATION_SCHEMA.COLUMNS'ビューを問い合わせる必要があります:' FROM database_name.INFORMATION_SCHEMA.COLUMNS WHERE .... ' – Lamak

答えて

1

から他のDB

EG SELECT *でのINFORMATION_SCHEMA obectsを照会する必要があります。ハードコーディングしない場合は、動的SQLを使用する必要があります。しかし、 "DbName.INFORMATION_SCHEMA.COLUMNS"は(同じサーバー上の)正しいシステムビューに移動し、TABLE_NAME = xとCOLUMN_NAME = yを使用するとテーブルと列に移動します。

SELECT DATA_TYPE 
    FROM THEOTHERDB.INFORMATION_SCHEMA.COLUMNS 
    WHERE TABLE_NAME = 'table_name' and COLUMN_NAME = 'column_name'; 
+0

うんうん、ありがとう! – Joe

0

その逆です! あなたが修飾子としてINFORMATION_SCHEMAの前にデータベース名を入れてOtherDB.information_schema.columns

関連する問題