Много раз мне нужно написать что-то вроде следующего при работе с SQL Server.
create table #table_name
(
column1 int,
column2 varchar(200)
...
)
insert into #table_name
execute some_stored_procedure;
Но создать таблицу с точным синтаксисом в результате хранимой процедуры - утомительная задача. Например, результат sp_helppublication имеет 48 столбцов! Я хочу знать, есть ли простой способ сделать это.
Благодарю.
sql-server
t-sql
stored-procedures
Просто ученик
источник
источник
Ответы:
Если процедура возвращает только один набор результатов и опция специальных распределенных запросов включена.
Или вы можете установить сервер с обратной связью и использовать его вместо этого.
источник
SET FMT_ONLY ON
?В SQL Server 2012 и более
sys.dm_exec_describe_first_result_set
поздних версиях вы можете использовать локально, предполагая, что набор результатов, к которому вы стремитесь, является первым результатом:Результат:
Обратите внимание, что есть ограничение: если ваша хранимая процедура создает таблицы #temp, функциональность метаданных не работает. Вот почему я не использовал sp_who2. :-)
источник
SELECT @sql += *expression*
документирован синтаксис где - нибудь? долженORDER BY
быть включен, чтобы сделать его стабильным?ORDER BY
на самом деле известно, чтобы сделать это менее стабильным . Если вы хотите , чтобы результаты в предсказуемом порядке, использоватьFOR XML PATH
или, если на достаточно новой версии SQL Server,STRING_AGG
.+=
... строка+=
задокументирована здесь . Но спасибо!Нет. Результат хранимой процедуры может сильно отличаться: она не предназначена для того, чтобы всегда возвращать ровно один набор результатов, например, SELECT для какого-либо объекта.
Вы должны выполнить CREATE TABLE
источник
Я бы написал процедуру для генерации таблицы для меня:
Затем позвоните с помощью:
Примечание . Замените YOUR_PROCEDURE_NAME_HERE именем своей собственной хранимой процедуры.
Примечание . Замените YOUR_TABLE_NAME_HERE именем таблицы по вашему выбору.
Выше будет генерировать что-то вроде этого:
источник