2017-12-16 3 views
1

SQL Serverでビューの列のデータ型を取得したいとします。効率的な方法がありますか?SQL Serverでビューの列のデータ型を取得する方法は?

データベース名、スキーマ、ビュー名をすべて1つのデータベースから動的に取得し、別のデータベースでそのビューを探し、3番目のデータベースの列のデータ型を検索する必要があります。

など。

SELECT @db2 = Name FROM db1.schema.databases 
SELECT @c = Name FROM db1.schema.columns 
SELECT @v = Name FROM db1.schema.views 


SELECT @datatype = query to get {datatype} of column {c} from {db2}.{schema}.{v} 

ここ{db2}.{schema}.{v}の列{C}は別のデータベースを参照することができますが、{} DB3

を示唆してくださいと言います。

答えて

2

は正確に何が必要か分からないのですが、これはあなたを助けるかもしれない:

USE master; 
GO 

CREATE VIEW dbo.TestView AS 
SELECT * FROM master..spt_values; 
GO 

- このビューの出力である

SELECT * FROM dbo.TestView; 
GO 

--setあなたの変数

DECLARE @db2 VARCHAR(100) = 'master'; 
DECLARE @c VARCHAR(100) = 'type'; 
DECLARE @vSchema VARCHAR(100) = 'dbo'; 
DECLARE @vName VARCHAR(100) = 'TestView' 

- クエリにDATA_TYPEが表示され、他のすべての列はによって返されます

SELECT c.DATA_TYPE 
     ,c.* 
FROM master.INFORMATION_SCHEMA.COLUMNS AS c 
WHERE [email protected] 
    AND [email protected] 
    AND [email protected] 
    AND [email protected]; --forgot this in the first post... 

--cleanアップ

GO 
DROP VIEW dbo.TestView; 

それは彼らが同じであるかのようCOLUMNSビューは、テーブルやビューを返すことを、少しあいまいです。利点:このINFORMATION_SCHEMA.COLUMNSはビルトイン対応sysテーブルに探してビューだけです:あなたは...テーブルの列をチェックする

ヒントを同じアプローチを使用することができます。

+0

INFORMATION_SCHEMA.COLUMNSは私の仕事ですが、スキーマとデータベース名が別のデータベースから来ているため、動的クエリを作成する必要がありました。 –

関連する問題