Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запись результатов работы процедуры во временную таблицу, / 12 сообщений из 12, страница 1 из 1
02.02.2018, 13:59
    #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
02.02.2018, 14:00
    #39595610
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись результатов работы процедуры во временную таблицу,
А что вы собрались делать с таблицой неизвестной структуры?
...
Рейтинг: 0 / 0
02.02.2018, 14:12
    #39595619
Digimot
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Запись результатов работы процедуры во временную таблицу,
Гавриленко Сергей Алексеевич,

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

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

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

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

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

14086351

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

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

TaPaKDigimot,

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

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

invmDigimot,

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

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

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

Боюсь у нас такой подход не возможен, большая часть процедур возвращает таблицу или набор таблиц.
...
Рейтинг: 0 / 0
02.02.2018, 18:14
    #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
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Запись результатов работы процедуры во временную таблицу, / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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