Сохранить динамический результат из хранимой процедуры в динамическую таблицу

Я столкнулся с некоторыми проблемами при сохранении выполнения хранимой процедуры/скалярной функции в табличной переменной.

Функция/хранимая процедура возвращает динамические столбцы, и мне нужно создать динамическую таблицу, чтобы сохранить в ней результат этой функции, чтобы я мог использовать таблицу.

Пример: хранимая процедура spGetEmployeeInfo может возвращать имя сотрудника, идентификатор сотрудника и т. д., по таким критериям они возвращают только имя сотрудника.

Есть ли способ создать динамическую таблицу и сохранить в ней результат после выполнения хранимой процедуры или любого предложения.

Спасибо


person Sami    schedule 17.02.2021    source источник
comment
Есть ли способ создать динамическую таблицу Использовать SELECT...INTO? Вам нужно будет сделать это внутри динамического оператора, а не за его пределами.   -  person Larnu    schedule 17.02.2021


Ответы (1)


Мне не нравится попадать в такую ​​ситуацию слишком часто, но когда я это делаю, я сохраняю вывод хранимой процедуры в глобальную временную таблицу. Имя таблицы передается пользователем в качестве параметра. Например:

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;

Помимо того, что он просто динамичен в выводе, он также может вывести вас из-под ограничений вложенных вставок-exec.

person pwilcox    schedule 17.02.2021