Получил сложный запрос SELECT, из которого я хотел бы вставить все строки в табличную переменную, но T-SQL не позволяет этого.
Кроме того, нельзя использовать табличную переменную с запросами SELECT INTO или INSERT EXEC. http://odetocode.com/Articles/365.aspx
Краткий пример:
declare @userData TABLE(
name varchar(30) NOT NULL,
oldlocation varchar(30) NOT NULL
)
SELECT name, location
INTO @userData
FROM myTable
INNER JOIN otherTable ON ...
WHERE age > 30
Данные в табличной переменной позже будут использоваться для вставки / обновления их в разные таблицы (в основном это копирование тех же данных с незначительными обновлениями). Цель этого состоит в том, чтобы сделать скрипт немного более читабельным и более легко настраиваемым, чем SELECT INTO
непосредственно в правильные таблицы. Производительность не является проблемой, так как rowcount
она довольно мала и запускается только вручную, когда это необходимо.
... или просто скажи мне, если я все делаю неправильно.
источник
Цель
SELECT INTO
(в соответствии с документами, мой акцент)Но у вас уже есть целевой стол! Итак, что вы хотите, это
И в этом синтаксисе разрешено
MyTable
быть табличной переменной.источник
MyTable
- это заполнитель для имени вашей фактической таблицы . Я не думаю, что есть реальные базы данных с таблицей с именемMyTable
...Вы также можете использовать общие табличные выражения для хранения временных наборов данных. Они более элегантны и удобны в использовании:
источник
Вы можете попробовать использовать временные таблицы ... если вы не делаете это из приложения. (Это может быть нормально, чтобы запустить это вручную)
Вы пропускаете попытку объявить таблицу таким образом ... Помогает для специальных запросов ... Это создает локальную временную таблицу, которая не будет видна другим сеансам, если вы не находитесь в том же сеансе. Может быть проблема, если вы запускаете запрос из приложения.
если вам требуется его запуск в приложении, используйте переменные, объявленные следующим образом:
Изменить: как многие из вас упомянули обновленную видимость сеанса от соединения. Создание временных таблиц не подходит для веб-приложений, так как сеансы можно использовать повторно, в таких случаях придерживайтесь временных переменных.
источник
function
. По моему опыту, в большинстве случаев, когда кто-то считает, что ему нужны такие заявления, на самом деле это означает, что он должен переосмыслить своиfunction
- или, по крайней мере, рефакторингprocedure
. Говоря за себя, по крайней мере. :-)Попробуйте использовать
INSERT
вместоSELECT INTO
:источник
Сначала создайте временную таблицу:
Шаг 1:
** Шаг 2: ** Вставьте некоторое значение в временную таблицу.
Шаг 3: Объявите переменную таблицы для хранения данных временной таблицы.
Шаг 4: выберите значение из временной таблицы и вставьте в переменную таблицы.
Наконец, значение вставляется из временной таблицы в переменную таблицы
Шаг 5: Можно проверить вставленное значение в табличной переменной.
источник
Хорошо, теперь с достаточным усилием я могу вставить в @table, используя следующие:
Здесь главное выбрать столбцы для вставки.
источник
Одна из причин использования SELECT INTO заключается в том, что он позволяет использовать IDENTITY:
Это не будет работать с табличной переменной, что очень плохо ...
источник
IDENTITY
столбца.