powered by simpleCommunicator - 2.0.60     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запись результатов работы процедуры во временную таблицу,
12 сообщений из 12, страница 1 из 1
Запись результатов работы процедуры во временную таблицу,
    #39595608
Digimot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
MS SQL сам создает таблицу, если мы запускаем запрос вида

select
col1,
col2 as col3
into #tbl_tmp
from dbo.tbl_realdata

Можно ли сделать то же самое, но с процедурой?
Что то вроде :

Insert Into #Temp1 Exec dbo.sp_GetAllData @Name = 'Jason'.

Нашел пока 2 способа реализовать подобное:

https://stackoverflow.com/questions/42984503/how-to-insert-result-of-stored-procedure-into-temp-table-without-declaring-temp

OPENROWSET не подходит из-за необходимости указывать данные подключения к серверу, а второй способ с
sys.dm_exec_describe_first_result_set_for_object похоже работает только на простейших примерах, если есть несколько вариантов возвращаемых данных, используется with или темповые таблицы, он выдает ошибку.
Есть ли какие еще варианты?
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595610
Гавриленко Сергей Алексеевич
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А что вы собрались делать с таблицой неизвестной структуры?
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595619
Digimot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Гавриленко Сергей Алексеевич,

Сравнивать результаты до и после изменений, необходимо для тестирования.
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595672
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DigimotOPENROWSET не подходит из-за необходимости указывать данные подключения к серверу
Ещё OPENROWSET не подходит из-за невозможности выполнить любую процедуру, так можно выполнить только некоторые.

Можно в принципе попробовать написать CLR функцию...
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595681
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Digimot,

ну в подобном извращении вышли через глобальную временную таблицу(мерзость :)). Или в процедуре сворачивать результаты в xml и возвращать его, потом разварачивать в таблицы
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595685
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
TaPaKDigimot,

ну в подобном извращении вышли через глобальную временную таблицу(мерзость :)). Или в процедуре сворачивать результаты в xml и возвращать его, потом разварачивать в таблицыЭто для нахождения различия рекордсетов двух произвольных процедур? :-)
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595709
TaPaK
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alexeyvgTaPaKDigimot,

ну в подобном извращении вышли через глобальную временную таблицу(мерзость :)). Или в процедуре сворачивать результаты в xml и возвращать его, потом разварачивать в таблицыЭто для нахождения различия рекордсетов двух произвольных процедур? :-)
та нет конечно, класический костыль :)
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595734
invm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Digimot,

14086351

Результат будет содержать данные и метаданные. Так что получить в результате временную таблицу - дело техники. Хотя имея xml-и, можно и без временных таблиц обойтись.
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595736
Владислав Колосов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Digimot,
Канонически процедуры должны возвращать код результата выполнения, никаких рекордсетов. Результат возвращают запросы. Но авторы серверов обычно применяют гибкий подход к потребителю с целью максимального сбора денежных средств :)
Если Вы сможете обойтись без получения табличных данных из процедуры, то избежите проблемы, создаваемой сильной связанностью кода. Просто архитектурный совет.
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595745
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Владислав КолосовDigimot,
Канонически процедуры должны возвращать код результата выполнения, никаких рекордсетов. Результат возвращают запросы. Но авторы серверов обычно применяют гибкий подход к потребителю с целью максимального сбора денежных средств :)
Если Вы сможете обойтись без получения табличных данных из процедуры, то избежите проблемы, создаваемой сильной связанностью кода. Просто архитектурный совет.Интересно посмотреть, где такие каноны прописаны :-) У меня другие :-)
И что подразумевается под "сильной связанностью кода" в случае применения хранимых процедур для получения рекордсетов?
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595779
Digimot
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
alexeyvgDigimotOPENROWSET не подходит из-за необходимости указывать данные подключения к серверу
Ещё OPENROWSET не подходит из-за невозможности выполнить любую процедуру, так можно выполнить только некоторые.

Об этом не знал, можно подробней про ограничения ?

TaPaKDigimot,

ну в подобном извращении вышли через глобальную временную таблицу(мерзость :)). Или в процедуре сворачивать результаты в xml и возвращать его, потом разварачивать в таблицы

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

invmDigimot,

14086351
Результат будет содержать данные и метаданные. Так что получить в результате временную таблицу - дело техники. Хотя имея xml-и, можно и без временных таблиц обойтись.

Почитаю, спасибо, похоже единственный вариант это xml?

Владислав КолосовDigimot,
Канонически процедуры должны возвращать код результата выполнения, никаких рекордсетов.

Боюсь у нас такой подход не возможен, большая часть процедур возвращает таблицу или набор таблиц.
...
Рейтинг: 0 / 0
Запись результатов работы процедуры во временную таблицу,
    #39595817
Фотография alexeyvg
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DigimotalexeyvgЕщё OPENROWSET не подходит из-за невозможности выполнить любую процедуру, так можно выполнить только некоторые.Об этом не знал, можно подробней про ограничения ?Например:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
SELECT a.*  
FROM OPENROWSET('SQLNCLI', 'Server=(local);Trusted_Connection=yes;',
     'exec sp_help') AS a;

Msg 11512, Level 16, State 1, Procedure sp_describe_first_result_set, Line 1 [Batch Start Line 7]
The metadata could not be determined because the statement 'select
		            'Name'          = o.name,
		            'Owner'         = user_name(ObjectPro' in procedure 'sp_help' is not compatible with the statement 'select
		            'Name'          = o.name,
		            'Owner'         = user_name(ObjectPro' in procedure 'sp_help'.
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запись результатов работы процедуры во временную таблицу,
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]