xpertzgurtej Ответов: 2

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


Я хочу получить данные из таблиц для указанных пользователем столбцов.

Что я уже пробовал:

--образец таблицы
Создать таблицу #tbEmployeeMaster (Кодсотрудника int удостоверение(1,1), EmployeeName тип varchar(100), отчество тип varchar(100), MotherName тип varchar(100), возраст ИНТ)

Вставить в #tbEmployeeMaster (EmployeeName ,отчество , MotherName, возраст) значения ('Аман', 'Роман', 'Анита', 22)
Вставить в #tbEmployeeMaster (EmployeeName ,отчество , MotherName, возраст) значения ('Сунил', 'Сандип', 'входить', 22)


DECLARE @SelectedColumns VARCHAR(500)='EmployeeName,возраст';
--Примечание: пользователь может выбрать вышеуказанные столбцы в любом порядке,например возраст, имя сотрудника

--Я попробовал динамический sql следующим образом.
ОБЪЯВИТЬ @SQL VARCHAR(2000)
Набор @среда SQL = "выбрать" + @SelectedColumns + 'с #tbEmployeeMaster'
EXEC(@SQL) -это работает

--Я хочу вставить данные во временную таблицу, используя синтаксис ниже, чтобы я мог использовать их дальше.Но это не сработало. Я знаю, что переменная таблицы не может быть использована здесь, потому что мы не знаем порядок столбцов.

Выберите * в #tbEmp EXEC(@SQL)

PIEBALDconsult

ВСТАВЛЯТЬ... Казнить ... ?

2 Ответов

Рейтинг:
2

Andy Lanng

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

Вы должны добавить "select into" в запрос:

DECLARE @SQL VARCHAR(2000)
SET @SQL = 'SELECT ' + @SelectedColumns + ' INTO #tbEmp FROM #tbEmployeeMaster' 
EXEC(@SQL)


использование select-into self определяет структуру таблицы, как я уверен, вы уже знаете.


xpertzgurtej

не сработало..получена ошибка : недопустимое имя объекта '#tbEmp'

Рейтинг:
1

Bryian Tan

Боюсь, что ваше решение не сработает так, как вы себе представляете. Вам нужно будет создать схему #tbEmp /заранее, прежде чем выполнять хранимую процедуру. Или используйте функцию OPENROWSET. или написать все решение с помощью dynamics SQL .

CREATE TABLE #tbEmp (EmployeeName VARCHAR(100), Age INT)
...
INSERT INTO #tbEmp EXEC(@SQL)


sql - вставка результатов хранимой процедуры во временную таблицу - переполнение стека[^]

https://blog.sqlauthority.com/2013/05/27/sql-server-how-to-insert-data-from-stored-procedure-to-table-2-different-methods/