问题描述
我在将存储过程/标量函数的执行保存到表变量中时遇到了一些问题。
函数/存储过程返回动态列,我需要创建一个动态表来将该函数的结果保存到其中,以便我可以使用该表。
示例:存储过程 image = ImageOps.invert(image)
可以根据这些条件返回员工姓名、员工 ID 等,它们仅返回员工姓名。
有没有办法在执行存储过程或任何建议后创建一个动态表并将结果保存到其中。
谢谢
解决方法
我不喜欢经常遇到这种情况,但是当我这样做时,我所做的是将存储的 proc 输出放入全局临时表中。表的名称由用户作为参数传入。例如:
create procedure dynamicBeCareful
@toggle bit,@globalTempTableName varchar(50)
as
-- initializations
if left(@globalTempTableName,2) <> '##'
throw 50000,'@globalTempTableName must start with ##',1;
declare @sql varchar(max);
-- build dynamic sql
if @toggle = 1
set @sql = 'select * into @tempTable from table1';
else
set @sql = 'select * into @tempTable from table2';
set @sql = replace(@sql,'@tempTable',@globalTempTableName);
-- terminations
exec (@sql);
declare @msg = 'Your results are in ' + @globalTempTableName;
print (@msg);
然后像这样使用它:
exec dynamicBeCareful 1,'##temp';
select * from ##temp;
除了输出动态之外,它还可以让您摆脱嵌套的 insert-exec 限制。