Определение таблицы SQL Server из набора результатов хранимых процедур - PullRequest
4 голосов
/ 19 марта 2010

Кто-нибудь знает способ создания определения таблицы из набора результатов хранимых процедур?

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

Существует ли встроенная процедура, которая выводит имена и типы столбцов ..?

Спасибо.

Ответы [ 4 ]

1 голос
/ 24 ноября 2018

Вы пробовали это?

DECLARE @sql NVARCHAR(MAX) = N'EXEC mydb.dbo.my_procedure;';

SELECT name, system_type_name, max_length, is_nullable FROM sys.dm_exec_describe_first_result_set(@sql, NULL, 1);

Он не создаст таблицу для вас, но вы можете быстро создать ее, зная имена и типы имен столбцов.

0 голосов
/ 03 октября 2011

Ты "можешь" сделать это, но я не знаю, рекомендую ли я это:

EXEC sp_configure 'Show Advanced Options', 1
GO
RECONFIGURE
GO
EXEC sp_configure 'Ad Hoc Distributed Queries', 1
GO
RECONFIGURE
GO

SELECT
  *
INTO
  #table
FROM
  OPENROWSET(
    'SQLNCLI',
    'SERVER=.;Trusted_Connection=yes',
    'EXEC StoredProcedureName'
  )
0 голосов
/ 27 марта 2012

в вашей хранимой процедуре вам нужно будет выполнить «SELECT INTO» с «WHERE 1 = 0», чтобы он просто создал пустую таблицу.

Если вы хотите определить типы данных: преобразовать или привести ваш столбец к этому типу данных

если вы хотите ограничение NOT NULL, вы должны использовать в select: isnull (yourcolumn, '123') в качестве yourcolumn, а затем в предложении where укажите WHERE yourcolumn <> '123'

0 голосов
/ 19 марта 2010

Если это разовая вещь, вы можете попробовать это (не в производстве!).

Обычно я просто иду к дочерней процедуре и в запросе, возвращающем набор результатов, добавляю INTO YourNewTable между списком выбора столбцов и FROM. Запустите дочернюю процедуру 1 раз, а затем удалите изменение.

Затем можно перейти к просмотру столбцов набора результатов, просмотрев YourNewTable в SQl Server Management Studio или запросе к любым метаданным таблицы, например:

SELECT 
    * 
    FROM INFORMATION_SCHEMA.Columns 
    WHERE TABLE_NAME='YourNewTable'
    ORDER BY ORDINAL_POSITION
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...