Динамические результаты запроса в таблицу temp или табличную переменную

У меня есть хранимая процедура, которая использует sp_executesql для генерации набора результатов, количество столбцов в результате может меняться, но будет в форме Col1 Col2 Col3 и т. Д.

Мне нужно получить результат в таблице temp или table, чтобы я мог работать с ним. Проблема в том, что мне нужно определить столбцы таблицы temp, которые я не могу выполнять динамически с помощью sp_executesql, поскольку область таблицы temp теряется после выполнения команды.

Я играл с идеей использования таблиц Global Temp, так как область позволяет создавать динамически, однако есть очень хорошие шансы, что глобальные Temps будут обновляться при одновременном выполнении этого процесса.

Есть идеи?

Я нашел решение, которое работает для меня с помощью @SQLMenace в этом столбце T-SQL Dynamic SQL и Temp Tables

Короче говоря, мне нужно сначала создать таблицу #temp в стандартном SQL, затем я могу изменить структуру, используя дальнейшие динамические операторы SQL. В этом примере @colcount устанавливается в 6. Это будет определено другим сохраненным proc, когда я его реализую.

IF object_id('tempdb..#myTemp') IS NOT NULL DROP TABLE #myTemp CREATE TABLE #myTemp (id int IDENTITY(1,1) ) DECLARE @cmd nvarchar(max) DECLARE @colcount int SET @colcount = 6 DECLARE @counter int SET @counter = 0 WHILE @counter < @colcount BEGIN SET @counter = @counter + 1 SET @cmd = 'ALTER TABLE #myTemp ADD col' + CAST(@counter AS varchar(4)) + ' NVARCHAR(MAX)' EXEC(@cmd) END INSERT INTO #myTemp EXEC myProc @param1, @param2, @param3 SELECT * FROM #myTemp 

Вы можете использовать глобальные таблицы temp, имена которых «уникальны» по SPID процесса создания. Это может позволить вам не топать на других глобальных временных таблицах, созданных другими соединениями.

Просто убедитесь, что очистите их, когда закончите … 🙂

Есть ли причина, по которой вы не можете сделать что-то вроде:

 SELECT * INTO #MyTempTable FROM MyResultSet 

SELECT INTO не требует явного списка полей.

  • Локальные и глобальные временные таблицы в SQL Server
  • Таблицы Temp текущего соединения
  • Как сохранить единый набор результатов в таблице temp из хранимой процедуры SQL, возвращающей несколько наборов?
  • Включение многозначного параметра в временную таблицу в SQL Server Business Intelligence Development Studio
  • Как изменить тип данных столбца во временной таблице в SQL
  • Контекст соединения SQL Server с использованием временной таблицы не может использоваться в хранимых процедурах, вызванных с помощью SqlDataAdapter.Fill
  • рекомендую хороший учебник по таблице temp в SQL Server
  • SQL Server: несколько вставок в таблицу temp при создании значения для каждой другой вставки
  • Обновить переменную таблицы в SQL Server и получение Должен объявить скалярную переменную
  • SQL Server Iterate через CTE
  • выберите null как testdate в #temp_table
  • Interesting Posts

    Проверьте слово, начинающееся с определенной строки

    Что должно иметь свойство itemcount в SQL Server

    Sql для использования столбца из одной таблицы и заполнения другой таблицы

    Datepart час не поддерживается функцией даты dateadd для даты типа данных

    Автоматическое подключение базы данных SQL Server во время / после установки

    Azure подключить Java-приложение Java (Java) к SQLDatabase

    Хранение данных в appconfig из текстового поля

    Поставщик именованных каналов SQL Linked Server – ошибка 5

    Экспорт таблицы из SQL Server 2008 R2 в файл БЕЗ внешних инструментов

    как вставить datetime в таблицу SQL Database?

    SQL Management Studio 2008 – имя сервера на вкладках Редактор запросов … куда они пошли?

    SQL-оператор для двух групповых столбцов

    Ведущая запятая или Trailing Comma?

    INSERT или UPDATE из другой таблицы с составным первичным ключом

    Как оптимизировать использование предложения «ИЛИ» при использовании с параметрами (SQL Server 2008)

    Давайте будем гением компьютера.