如何从已执行的过程中存储临时 table?
How can I store a temporary table from an executed procedure?
我有以下代码:
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
行语法不正确,但它显示了我正在尝试做的事情。列是可变的,这意味着我不能只声明一个 table 变量。如何将此执行过程的输出传递给 #TriggerTable
?
您可以将数据存储在全局临时 table (##) 中,使用 Select * 进入方法并存储在 #temp table 中,您必须创建 table 首先,我在使用动态 sql 时知道这一点,但是您当然可以在 运行 时间内完成此操作,但您仍然可能需要一些物理 table 才能访问它。
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
使用全局临时 table 可以很容易地做到这一点,而且您不必创建任何 table,如果您愿意,可以指定列名。
declare @sql nvarchar(max) = 'select * into ##Gloabltmptest from testtmp'
exec sp_executesql @sql
select * from ##Gloabltmptest
输出:
ID namen
1 XYZ
2 ABC
3 DIG
也添加了 table 变量,类似于#temp tables。
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
我有以下代码:
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
行语法不正确,但它显示了我正在尝试做的事情。列是可变的,这意味着我不能只声明一个 table 变量。如何将此执行过程的输出传递给 #TriggerTable
?
您可以将数据存储在全局临时 table (##) 中,使用 Select * 进入方法并存储在 #temp table 中,您必须创建 table 首先,我在使用动态 sql 时知道这一点,但是您当然可以在 运行 时间内完成此操作,但您仍然可能需要一些物理 table 才能访问它。
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
使用全局临时 table 可以很容易地做到这一点,而且您不必创建任何 table,如果您愿意,可以指定列名。
declare @sql nvarchar(max) = 'select * into ##Gloabltmptest from testtmp'
exec sp_executesql @sql
select * from ##Gloabltmptest
输出:
ID namen
1 XYZ
2 ABC
3 DIG
也添加了 table 变量,类似于#temp tables。
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