【问题标题】:Execute store procedure like a "table" for SELECT operator (MS SQL SERVER)为 SELECT 运算符(MS SQL SERVER)执行像“表”一样的存储过程
【发布时间】:2012-04-13 02:03:57
【问题描述】:

是否可以执行存储过程 像SELECT 运算符(MS SQL SERVER)的“表”?

有点像

SELECT TotalSum FROM exec MyStoreProcedure '2011/11/01', '2011/11/01'  

我的意思是以某种方式将其集成到 SELECT 运算符中?

谢谢!


谢谢大家!

我所做的解决方案是基于您的回答:

declare @result table (f1 varchar(20),f2 varchar(20), CodProducto int, NomProducto varchar(1000), Costo decimal, Cantidat int, Total decimal)
INSERT INTO @result exec  MyStoreProcedure '20111201', '20111201'
select * from @result

【问题讨论】:

  • 不,但是您可以将这些结果插入到表格中(当然,如果您知道您的 sp 的结果数据集的列)

标签: sql tsql stored-procedures select


【解决方案1】:

不直接(或不将存储过程更改为表值函数)。

但你可以这样做:

INSERT INTO SomeTempTableWithSchemaMatchingTheSproc (...)
EXEC MyStoredProcedure 

SELECT * FROM SomeTempTableWithSchemaMatchingTheSproc 

从 SQL Server 2005 开始,您也可以使用表变量。

【讨论】:

    【解决方案2】:

    我猜你的 proc 返回了几列,而你只想要一个,对吧?

    小解决方法是将 proc 的结果添加到表变量中,然后从中选择

    create proc proc1 as
    select 1 as one, 2 as two
    
    declare @result table (one int, two int)
    
    insert into @result
    exec proc1
    
    select one from @result
    

    【讨论】:

    • 问题:是否可以将其放入.NET 的SQLCommand 对象中?它会起作用吗?
    【解决方案3】:

    作为函数而不是存储过程,这会更好。

    create function dbo.TestTable
    (@var1 bit)
    returns table
    AS
    RETURN
    ( select *
        from INFORMATION_SCHEMA.TABLES
        where @var1 = 1
    );
    
    
    select * from
    dbo.TestTable(1)
    

    【讨论】:

      【解决方案4】:

      这对我有用:

      CREATE VIEW dbo.vw_xxx
      AS
        select * from openquery(YOURSERVERNAME, 'exec [sp_xxx] '''','''','''','''','''','''' ')
      

      【讨论】:

        猜你喜欢
        • 2015-06-18
        • 2015-06-18
        • 2013-01-23
        • 2017-11-01
        • 1970-01-01
        • 2011-11-07
        • 2013-03-26
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多