我想获取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}
请建议。
答案 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_TYPE
和INFORMATION_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
表。