функциональная причина, почему хранимые процедуры не поддерживают INSERT / EXECUTE INTO? - PullRequest
3 голосов
/ 16 июля 2009

В SQL Server нет способа создать временную таблицу на лету из результатов хранимой процедуры, ala:

CREATE TABLE #temptable AS
EXEC spMyStoredProc

или

EXEC spMyStoredProc INTO #temptable

или что-то в этом роде. Вместо этого вы должны заранее знать схему SP и сделать что-то вроде этого:

CREATE TABLE #temptable (col1 INT, col2 VARCHAR(255))

INSERT INTO #temptable
EXEC spMyStoredProc

Есть ли функциональная причина, почему это так? Может быть, ограничение SQL Server? Или это просто то, что еще не было добавлено в спецификацию SQL, и я могу надеяться, что однажды они его поддержат?

Ответы [ 4 ]

10 голосов
/ 16 июля 2009

Хранимая процедура может возвращать множество наборов результатов или ни одного, и она может полностью меняться в зависимости от выполнения хранимой процедуры.

Когда он компилируется, его метаинформация не описывает его как наличие какого-либо определенного ожидаемого результата набора результатов.

Я ожидаю, что с учетом этих ограничений они решили не реализовывать это из-за отсутствия строгой типизации того, что может вернуть хранимая процедура.

0 голосов
/ 16 июля 2009

Если бы мне нужна была такая функциональность, я бы использовал встроенный UDF, например:

CREATE PROCEDURE MySample
AS
SELECT a,b,c FROM dbo.MyInlineUDF(1,2,3)
GO

SELECT * INTO #t
FROM dbo.MyInlineUDF(1,2,3) WHERE 1=0

INSERT INTO #t EXEC MySample
0 голосов
/ 16 июля 2009

Попробуйте это

DECLARE @temptable TABLE (ID INT, NAME VARCHAR(255))

declare @query varchar(max)

set @query='Select whatever from whereever'

INSERT INTO @temptable

EXEC (@Query)

select *from @temptable
0 голосов
/ 16 июля 2009

Не из sproc, но вы можете использовать функции табличных значений, чтобы сделать нечто подобное.

Select * From fnMyFunction

Вы можете вставить в таблицу #, если хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...