-1

Мне интересно, есть ли простой способ получить синтаксис таблицы create для возврата хранимой процедуры.Создать синтаксис таблицы для возврата хранимой процедуры

К примеру у нас есть хранимая процедура:

CREATE PROCEDURE [dbo].[usp_branches] 
AS BEGIN 
    select * from branches 
END 

, а затем мне нужно что-то вроде этого

insert into @tempBranches 
exec usp_branches 

Есть ли способ, что я могу легко получить создать синтаксис таблицы из возврата хранимой процедуры? Поэтому для этого примера я получу это

DECLARE @tempBranches TABLE 
    (
     BranchID int 
     ,BranchName varchar(25) 
    ) 
+1

дубликат этого: http://stackoverflow.com/questions/653714/how-to-select-into-temp-table-from-stored-procedure –

ответ

2

В SQL Server 2012 да. Появилась новая функциональность, которая будет получать метаданные на основе специальной строки SQL или имени объекта (подробности см. В http://sqlblog.com/blogs/aaron_bertrand/archive/2010/12/20/sql-server-v-next-denali-metadata-discovery.aspx).

В более ранних версиях (вы забыли сообщить нам, какая версия), есть несколько менее надежных обходных решений. например

SELECT * INTO #table FROM OPENROWSET('SQLNCLI', 
    'Server=(local);Trusted Connection=Yes;', 
    'EXEC yourdatabase.dbo.usp_branches;'); 

Для того, чтобы сделать это сначала нужно сказать:

EXEC sp_configure 'show adv', 1; 
RECONFIGURE WITH OVERRIDE; 
GO 
EXEC sp_configure 'ad hoc dist', 1; 
RECONFIGURE WITH OVERRIDE; 
GO 

Теперь вы можете построить CREATE TABLE оператор, основанный на tempdb.sys.columns where name LIKE '#table%';. Или безопаснее where [object_id] = OBJECT_ID('tempdb..#table');.

Просто имейте в виду, что, как и новая функциональность метаданных, если имеется более одного набора результатов (или форма может меняться в зависимости от ввода), все ставки отключены.

+0

хороший трюк с зацикливанием запросами –

+0

@DenisValeev спасибо, откровенно Я думаю, что это плохое решение (должны быть лучшие способы получения метаданных результатов), но это, безусловно, популярное решение. :-) –

+0

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

Смежные вопросы