如何在SQL Server中获取视图列的数据类型?

时间:2017-12-16 11:40:59

标签: sql-server

我想获取SQL Server中视图列的数据类型。有没有一种有效的方法呢?

我必须从一个数据库动态获取数据库名称,架构,视图名称,在另一个数据库中查找该视图,并在第三个数据库中查找该列的数据类型。

E.g。

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}

请建议。

1 个答案:

答案 0 :(得分:2)

不确切知道你需要什么,但这可能会对你有所帮助:

USE master;
GO

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

- 这是视图的输出

SELECT * FROM dbo.TestView;
GO

- 设置变量

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

- 查询将显示DATA_TYPEINFORMATION_SCHEMA.COLUMNS

返回的所有其他列
SELECT c.DATA_TYPE
      ,c.* 
FROM master.INFORMATION_SCHEMA.COLUMNS AS c
WHERE c.TABLE_NAME=@vName 
  AND c.TABLE_SCHEMA=@vSchema
  AND c.COLUMN_NAME=@c
  AND c.TABLE_CATALOG=@db2; --forgot this in the first post...

- 清理

GO
DROP VIEW dbo.TestView;

有点模糊,COLUMNS视图返回表和视图,就像它们是相同的一样。优点:您可以使用相同的方法检查表的列...

提示:此INFORMATION_SCHEMA.COLUMNS只是一个内置视图,用于查看相应的sys表。