Tsql如何在链接服务器中获取存储过程中使用的列

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Tsql如何在链接服务器中获取存储过程中使用的列相关的知识,希望对你有一定的参考价值。

我在mssql数据库中有一个存储过程,它使用链接服务器中的视图中的数据。我需要检索有关存储过程中使用的此视图的列及其数据类型的信息。

我试过这个但没有工作:

 SELECT DatabaseName = Isnull(referenced_database_name, Db_name()),
       StoredProcedureName = 'spr_rpt_CustomerSurvey',
       SO.objecttype,
       ObjectName = referenced_entity_name,
       ColumnName = referenced_minor_name,
       OrdinalPosition = referenced_minor_id
FROM   sys.Dm_sql_referenced_entities('[dbo].[spr_rpt_CustomerSurvey]', 'OBJECT'
       ) R
       CROSS apply (SELECT ObjectType = ( CASE type_desc
                                            WHEN 'VIEW' THEN 'View'
                                            WHEN 'USER_TABLE'THEN'Table'
                                          END )
                    FROM   sys.objects
                    WHERE  object_id = R.referenced_id) SO
WHERE  referenced_minor_name IS NOT NULL  

一些想法???谢谢。

答案

我从来没有尝试过针对链接服务器的sp_describe_first_result_set,可能会工作...

另一种选择是SELECT TOP 1 * INTO SomeTable FROM YourView;

这将创建一个新表“SomeTable”,其中写入视图的结果。现在,您可以检查此表的列和类型。

链接服务器也是SQL RDBMS吗?大多数SQL RDBMS支持针对INFORMATION_SCHEMA的查询,在你的情况下针对INFORMATION_SCHEMA.COLUMNS并且要注意,视图的名称很可能在TABLE_NAME下找到...

另一答案

查看列可以在中找到

SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'view name'

可以在中找到TVF列

SELECT * FROM INFORMATION_SCHEMA.ROUTINE_COLUMNS WHERE TABLE_NAME = 'view name'

如果视图位于链接服务器上,则需要使用链接服务器中的INFORMATION_SCHEMA.COLUMNS

SELECT * FROM [linked server].[database name].INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'view name'

以上是关于Tsql如何在链接服务器中获取存储过程中使用的列的主要内容,如果未能解决你的问题,请参考以下文章

如何从存储过程的表中的列中获取输出参数

TSQL - 如何在另一列中提取具有最小值和最大值的列

如何从存储过程结果中检索特定列而不是所有列?

如何在 select 语句的列列表中使用存储过程的结果?

TSQL 何时为存储过程中的变量(和表变量)分配内存

如何从列数未知的存储过程中查看 Toad 中结果集的内容?