Как я могу сохранить временную таблицу из выполненной процедуры? - PullRequest
4 голосов
/ 21 марта 2019

У меня есть следующий код:

SELECT @Name = [TrigTable] 
FROM [dbo].[setdevelopmentjob] 
WHERE [TrigTable] IS NOT NULL

PRINT @Name

SET @sql = 'SELECT * FROM ' + @Name;

#TriggerTable = EXEC sp_executesql @sql;

SELECT * FROM #TriggerTable

Очевидно, строка #TriggerTable = Exec sp_executesql @sql имеет неправильный синтаксис, но она показывает, что я пытаюсь сделать. Столбцы являются переменными, что означает, что я не могу просто объявить переменную таблицы. Как я могу передать вывод этой выполненной процедуры на #TriggerTable?

1 Ответ

3 голосов
/ 21 марта 2019

Вы можете сохранить данные в Глобальной временной таблице (##) с помощью Select * в подходе, и чтобы сохранить в таблице #temp, вы должны сначала создать таблицу, о которой я знаю при использовании динамического sql. Но вы, безусловно, можете это сделать.во время выполнения, но все же вам может потребоваться некоторая физическая таблица для доступа к ней.

create table testtmp (id int, namen varchar(15)) 

--inserting the data into physical table 
insert into testtmp (id, namen)

select 1 as ID, 'XYZ' as namen union all
select 2 as ID, 'ABC' as namen union all
select 3 as ID, 'DIG' as namen

create table #temp (ID int) 

declare @sql nvarchar(max) = 'select ID from testtmp' 
insert into #temp exec sp_executesql @sql 

select * from #temp 

Gives you this output: 

 ID 
  1 
  2 
  3 

С глобальной временной таблицей вы можете сделать это легко, и вам не нужно создавать никаких таблиц, вы можете указать имена столбцов, если хотите.

 declare @sql nvarchar(max) = 'select * into ##Gloabltmptest from testtmp' 
 exec sp_executesql @sql 

 select * from ##Gloabltmptest 

Вывод:

 ID  namen
 1  XYZ
 2  ABC
 3  DIG

Также добавлена ​​табличная переменная, аналогично таблицам #temp.

declare @table table (IDtab int, nametab varchar(15)) 

declare @sql nvarchar(max) = 'select * from testtmp' 
insert into @table exec sp_executesql @sql 

select * from @table 
...