Как автоматически сгенерировать код для типов данных столбцов хранимых процедур - SQL Server - PullRequest
0 голосов
/ 23 сентября 2019

Мой желаемый конечный результат - просто иметь возможность ВЫБРАТЬ из хранимой процедуры.Я искал в Интернете, и, к сожалению, Интернет сказал, что это невозможно, и что вам сначала нужно создать временную таблицу для хранения данных.Моя проблема заключается в том, что вы должны сначала определить столбцы во временной таблице перед выполнением хранимой процедуры.Это просто много времени.Я просто хочу взять данные из хранимой процедуры и просто вставить их во временную таблицу.

Каков маршрут FASTEST для достижения этого с точки зрения кодирования?Проще говоря, требуется много времени, чтобы сначала найти возвращенные поля в хранимой процедуре, а затем записать их все.

Существует ли какой-либо инструмент, который может просто создать оператор CREATE Table на основе хранимой процедуры?Смотрите скриншот для уточнения.

enter image description here

Большинство хранимых процедур, с которыми я имею дело, имеют более 50 полей.Я не с нетерпением жду определения каждого из этих полей вручную.

Вот хорошо ТАК Пост , который дал мне это далеко, но не то, на что я надеялся.Это все еще занимает слишком много времени.Что делают опытные парни из SQL Server?Я только недавно сделал переход с Oracle на SQL Server, и я вижу, что временные таблицы представляют собой большую проблему в SQL Server, насколько я могу судить.

Ответы [ 2 ]

2 голосов
/ 23 сентября 2019

Если вы не возражаете, ##temp table и некоторый динамический SQL

ПРИМЕЧАНИЕ: Как правильно заметил Луис Казарес ... ## temp рискует столкнуться из-запроблемы параллелизма

Пример

Declare @SQL  varchar(max) = 'Exec [dbo].[prc-App-Lottery-Search] ''8117'''
Declare @temp varchar(500) = '##myTempTable'

Set @SQL = '
If Object_ID(''tempdb..'+@temp+''') Is Not NULL Drop Table '+@temp+';   
Create Table '+@temp+' ('+stuff((Select concat(',',quotename(Name),' ',system_type_name) 
                                  From  sys.dm_exec_describe_first_result_set(@SQL,null,null )  A 
                                  Order By column_ordinal
                                  For XML Path ('')),1,1,'') +') 

Insert '+@temp+' '+@SQL+'
'
Exec(@SQL)

Select * from ##myTempTable
2 голосов
/ 23 сентября 2019

У вас есть несколько вариантов, чтобы облегчить вашу задачу.Тем не менее, они не будут полностью автоматически.Имейте в виду, что они не будут работать, если в коде процедуры есть динамический sql.Вы можете отформатировать результат с помощью функций, чтобы повысить автоматизацию, позволяя легко копировать и вставлять.

SELECT * FROM sys.dm_exec_describe_first_result_set_for_object(OBJECT_ID('report.MyStoredProcedureWithAnyColumns'), 0) ;  

SELECT * FROM sys.dm_exec_describe_first_result_set(N'EXEC report.MyStoredProcedureWithAnyColumns', null, 0) ;  

EXEC sp_describe_first_result_set @tsql = N'EXEC report.MyStoredProcedureWithAnyColumns';
GO  
...