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

时间:2017-12-21 20:38:50

标签: sql-server tsql stored-procedures view

我在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  

有些想法??? 谢谢你。

2 个答案:

答案 0 :(得分:0)

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

另一个选项是SELECT TOP 1 * INTO SomeTable FROM YourView;

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

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

答案 1 :(得分:0)

可以在

中找到查看列
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'