Создать синтаксис таблицы для возврата хранимой процедуры - PullRequest
0 голосов
/ 07 марта 2012

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

Например, у нас есть сохраненный процесс:

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 Ответ

2 голосов
/ 07 марта 2012

В SQL Server 2012 да. Появилась новая функция, которая будет извлекать метаданные на основе специальной строки SQL или имени объекта (см. https://sqlblog.org/2010/12/20/sql-server-v-next-denali-metadata-enhancements для получения более подробной информации об этом).

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

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');.

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

...