Sql server 使用TSql查找视图中的列来自的原始表

Sql server 使用TSql查找视图中的列来自的原始表,sql-server,Sql Server,如果我创建一个视图,例如: create view View1 as select Table1.Column1 from Table1 是否有一种方法可以在名称为View1的情况下查找表1。通过查询sys.columns(其中object_id等于sys.objects中视图名称的object_id)可以很容易地找到View1中的列,但是如何判断视图中的列来自哪个基础表?使用@browse_information_mode=1执行。这将返回一个结果集,其中包含每个视图列的基础表名和列名以及其

如果我创建一个视图,例如:

create view View1 as
select Table1.Column1 from Table1
是否有一种方法可以在名称为View1的情况下查找表1。通过查询sys.columns(其中object_id等于sys.objects中视图名称的object_id)可以很容易地找到View1中的列,但是如何判断视图中的列来自哪个基础表?

使用@browse_information_mode=1执行。这将返回一个结果集,其中包含每个视图列的基础表名和列名以及其他元数据。对于从表达式派生的视图列,源信息将为NULL,但将包括其他元数据,例如数据类型信息

EXEC sp_describe_first_result_set
      @tsql=N'SELECT * FROM dbo.YourView;'
    , @params = NULL
    , @browse_information_mode = 1;
请注意,SQL Server 2012中引入了sp_descripe_first_result_set,因此这在早期版本的SQL Server中不起作用。

使用@browse_information_mode=1执行。这将返回一个结果集,其中包含每个视图列的基础表名和列名以及其他元数据。对于从表达式派生的视图列,源信息将为NULL,但将包括其他元数据,例如数据类型信息

EXEC sp_describe_first_result_set
      @tsql=N'SELECT * FROM dbo.YourView;'
    , @params = NULL
    , @browse_information_mode = 1;

请注意,SQL Server 2012中引入了sp_descripe_first_result_set,因此这在SQL Server的早期版本中不起作用。

Awesome!如果原始视图语句是select Table1.Column1,Table2.Column1 from Table1 INTERNAR join Table2 on Table1.Column2=Table2.Column2是否有办法判断Table1是“from”基于的基表?@TDINSP,元数据将显示视图公开的列的源。对于内部联接查询,实际上没有基表的概念;无论是在FROM还是JOIN中指定表,结果都是相同的,并且源将是SELECT子句中指定的源。太棒了!如果原始视图语句是select Table1.Column1,Table2.Column1 from Table1 INTERNAR join Table2 on Table1.Column2=Table2.Column2是否有办法判断Table1是“from”基于的基表?@TDINSP,元数据将显示视图公开的列的源。对于内部联接查询,实际上没有基表的概念;无论是在FROM还是JOIN中指定表,结果都是相同的,并且源是在SELECT子句中指定的源。