将存储过程的动态结果保存到动态表中

问题描述

我在将存储过程/标量函数的执行保存到表变量中时遇到了一些问题。

函数/存储过程返回动态列,我需要创建一个动态表来将该函数的结果保存到其中,以便我可以使用该表。

示例:存储过程 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 限制。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...