web-dev-qa-db-fra.com

Exécuter la procédure de stockage comme une "table" pour l'opérateur SELECT (MS SQL SERVER)

Est-il possible d'exécuter la procédure de stockage comme une "table" pour l'opérateur SELECT (MS SQL SERVER)?

Quelque chose comme

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

Je veux dire en quelque sorte l'intégrer dans l'opérateur SELECT?

Je vous remercie!


Merci les gars!

La solution que j'ai faite est basée sur vos réponses:

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
21
Developer

Je suppose que votre proc renvoie plusieurs colonnes et vous en voulez juste une, non?

petite solution de contournement consiste à ajouter le résultat du proc à une variable de table, puis sélectionnez-le

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
20
Diego

Ce serait mieux en tant que fonction plutôt qu'en tant que procédure stockée.

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


select * from
dbo.TestTable(1)
5
Vinnie

Pas directement (ou sans modifier la procédure stockée pour être une fonction table).

Mais vous pouvez le faire:

INSERT INTO SomeTempTableWithSchemaMatchingTheSproc (...)
EXEC MyStoredProcedure 

SELECT * FROM SomeTempTableWithSchemaMatchingTheSproc 

SQL Server 2005 et versions ultérieures, vous pouvez également utiliser une variable de table.

2
Mitch Wheat

Cela fonctionne pour moi:

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