【问题标题】:Wrapping system procedure in View or Stored Procedure在视图或存储过程中包装系统过程
【发布时间】:2013-06-13 15:27:23
【问题描述】:

我正在尝试从使用 .NET Entity Framework 的应用程序调用 master..xp_fixeddrives,因此我需要结果是可解析的。我正在寻找调用 master..xp_fixeddrives,但对于 EF,它必须在视图或存储过程中。

我不知道创建它的语法。我尝试定义一个视图,并尝试删除 select 和 exec,但没有运气。我该怎么做?

create view zzz
as select exec 'master..xp_fixeddrives';

还尝试将其创建为存储过程,但 SP 实际上并没有返回任何内容,因为它没有 select 语句。

CREATE PROCEDURE GetHardDriveFreeSpaceInMegabytes
AS
BEGIN
    -- SET NOCOUNT ON added to prevent extra result sets from
    -- interfering with SELECT statements.
    SET NOCOUNT ON;

    EXEC master..xp_fixeddrives
END
GO

简单地调用以下也不起作用

select *
from master..xp_fixeddrives

【问题讨论】:

  • 你试过执行GetHardDriveFreeSpaceInMegabytes吗?存储过程不需要SELECT 语句来返回任何内容。调用另一个 EXEC 工作正常。
  • 我上面链接的问题解决了你的问题的症结。
  • @Martin Smith 执行它在 Management Studio 中工作,是的。但是,在实体框架模型中加载过程时,表明过程不返回任何列。
  • @Yuck 但您提出的副本是关于在不提前知道架构的情况下创建临时表。这涉及与环回连接和开放查询无关的箍。

标签: .net sql-server entity-framework sql-server-2005


【解决方案1】:

要从实体框架消耗的存储过程中提供列元数据,您可以这样做

CREATE PROCEDURE dbo.GetHardDriveFreeSpaceInMegabytes
AS
BEGIN
    SET NOCOUNT ON;

    DECLARE @xp_fixeddrives TABLE
    (
    drive nvarchar(1),
    [MB free] int
    )


    INSERT INTO @xp_fixeddrives 
    EXEC master..xp_fixeddrives

    SELECT *
    FROM @xp_fixeddrives
END

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多