Выполнить процедуру хранения как «таблицу» для оператора SELECT (MS SQL SERVER) - PullRequest
21 голосов
/ 29 марта 2012

Возможно ли выполнить процедуру хранения как "таблица" для оператора 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

Ответы [ 4 ]

20 голосов
/ 29 марта 2012

Я предполагаю, что ваш процесс возвращает несколько столбцов, а вы просто хотите один, верно?

небольшой обходной путь - добавить результат процедуры в табличную переменную и затем выбрать из нее

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
5 голосов
/ 29 марта 2012

Это было бы лучше как функция, а не как хранимая процедура.

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


select * from
dbo.TestTable(1)
2 голосов
/ 29 марта 2012

Не напрямую (или без изменения хранимой процедуры как табличной функции).

Но вы можете сделать это:

INSERT INTO SomeTempTableWithSchemaMatchingTheSproc (...)
EXEC MyStoredProcedure 

SELECT * FROM SomeTempTableWithSchemaMatchingTheSproc 

SQL Server 2005 и далее, вы также можетеиспользуйте переменную таблицы.

1 голос
/ 29 ноября 2017

Это работает для меня:

CREATE VIEW dbo.vw_xxx
AS
  select * from openquery(YOURSERVERNAME, 'exec [sp_xxx] '''','''','''','''','''','''' ')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...