获取存储过程表信息

时间:2015-04-04 14:22:35

标签: c# stored-procedures datatable sql-server-2012

是否可以在不调用存储过程的情况下从空DataTable中获取存储过程中的列名/类型? 这个存储过程也有我不想提供的参数。

这是可能的还是我必须重新考虑我的做法?

1 个答案:

答案 0 :(得分:0)

在Sql Server 2012中,他们引入了一个名为 dm_exec_describe_first_result_set_for_object 的函数,它完全符合您的要求。只要您的过程只返回一个结果集。

SELECT name, system_type_name
FROM sys.dm_exec_describe_first_result_set_for_object
(
  OBJECT_ID('master.sys.sp_who'), 
  NULL
);

另一种选择是使用FMTONLY然后调用该过程。执行此操作将获得具有正确列名称的空数据表。 在这种情况下,您需要提供存储过程的参数。

SET FMTONLY ON;
exec sp_who

从Sql Server 2012开始不推荐使用FMTONLY,因此如果可能的话我会尽量避免使用它。