Как выполнить результат хранимой процедуры во временную таблицу или переменную?
Как выполнить результат хранимой процедуры во временную таблицу ?
Я работаю на SQL server 2012, мне нужно получить результат, возвращенный из хранимой процедуры, и сохранить его во временную таблицу, переменную или любую другую вещь .
проблема в том, что дайте мне ошибку, когда это сделаете
ВЫБИРАТЬ *
В #TempTable
Из функции openrowset('файл sqlncli', 'сервер=AHMEDkhalid\Халид;trusted_connection=Да;','метод exec sp_ReportDetailsGetALL 3')
ГО
Я получаю ошибку
Сообщение 11514, Уровень 16, состояние 1, процедура процедура sp_describe_first_result_set, Линия 1
Метаданные не могут быть определены, поскольку оператор 'exec (@ColumnName)' в процедуре 'sp_ReportDetailsGetALL' содержит динамический SQL. Рассмотрите возможность использования предложения WITH RESULT SETS для явного описания результирующего набора.
возвращаемый результат является динамическим и возвращает различное содержимое результата и заголовки
моя процедура, как показано ниже
create proc [dbo].[sp_ReportDetailsGetALL] @ReportID nvarchar(20) , @ReportDateFrom nvarchar(20) = null, @ReportDateTo nvarchar(20) = null , @SearchString nvarchar(500)= '1=1' as declare @SortingColumns Nvarchar(200) = (select SortingColumns from [dbo].[Reports] where reportid=@ReportID ) if @ReportDateFrom is null and @ReportDateTo is null begin declare @D Date = (select Max(ReportDate) from ReportDetails where ReportID=@ReportID ) set @ReportDateFrom = @D set @ReportDateTo = @D end if (select InRunTime from [dbo].[Reports] where reportid=@ReportID ) =0 begin if (select IsDownloaded from [dbo].[Reports] where reportid=@ReportID ) =0 begin declare @ColumnName Nvarchar(max) = (SELECT 'select ' + STUFF((SELECT ',' + 'Text'+CONVERT(varchar(20),ReportHeaderIndex) + ' '+ '['+ReportHeader +']' FROM ReportHeaders where ReportID=@ReportID order by ReportHeaderIndex FOR XML PATH('')) ,1,1,'') + ' , convert(nvarchar(20),[ReportDate]) ReportDate From ReportDetails R where ReportDate >= ''' +@ReportDateFrom+''' and ReportDate <= '''+ @ReportDateTo +''' and R.ReportID =' + @ReportID + ' and '+@SearchString+' and IsHistory=0 order by reportdate desc ' + @SortingColumns AS Txt ) exec (@ColumnName) end else begin select [Conflict Report Name], [# of Parts], [# of Exceptions], [# of Parts Need to Check] , ReportDate , ReportLink from ( select ROW_NUMBER() OVER(Partition by Text1 ORDER BY ReportDate desc) AS Row_Number_, Text1 [Conflict Report Name],Text2 [# of Parts],Text3 [# of Exceptions],Text4 [# of Parts Need to Check] , convert(nvarchar(20),[ReportDate]) ReportDate , ReportLink From ReportDetails R where R.ReportID =9 and ishistory=0) T where Row_Number_ =1 order by reportdate desc end end else begin declare @S nvarchar(200) = (select [ProcedureName] from [dbo].[Reports] where reportid=@ReportID ) exec (@S) end
Если есть какой-то способ решить эту проблему без использования openrowset, я принимаю это
Мне нужна любая вещь, чтобы сохранить мой результат, возвращенный из хранимой процедуры выше, во временную таблицу или переменную, или любую другую вещь ?
Что я уже пробовал:
SELECT * INTO #TempTable FROM OPENROWSET('SQLNCLI', 'Server=AHMED-SALAH-PC\AHMEDSA;Trusted_Connection=yes;','EXEC sp_ReportDetailsGetALL 3') EXEC('exec DashBoardDB.[dbo].sp_ReportDetailsGetALL 3 WITH RESULT SETS (( ReportID int));')