【问题标题】:Get stored procedure table information获取存储过程表信息
【发布时间】:2015-04-04 14:22:34
【问题描述】:

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

这可能吗,还是我必须重新考虑我的方法?

【问题讨论】:

  • 哪个版本的 SQL Server?
  • 我真的应该更仔细地写我的问题,谢谢

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


【解决方案1】:

在 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

FMTONLY 自 Sql Server 2012 起已弃用,因此我会尽可能避免使用它。

【讨论】:

  • 是每个连接的 FMTONLY ON 还是当其他用户同时调用 sp 期望实际数据时,此设置是否会导致问题?
  • 仅适用于当前会话。完成后,您需要将其设置为 OFF,以便再次从数据库中取回结果。我刚刚读到它在 2012 年已被弃用,所以如果可能的话我会避免它。
  • 谢谢,我刚刚测试了第一个选项,这是完美的。我只需要将输出转换为 DataSet 列。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-05
  • 1970-01-01
  • 2015-10-02
  • 1970-01-01
  • 2018-05-11
  • 2012-12-22
相关资源
最近更新 更多