SQL Server: создание временной таблицы с динамическим столбцом - PullRequest
5 голосов
/ 30 октября 2011

У меня возникла проблема с моей текущей ситуацией, я искал любое решение в сети, но все равно не могу его найти.

Вот вопрос:

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

Например:

INSERT INTO Database1.Table1(column1, column2, column3)
   SELECT column1,column2, column3
   FROM Database2.Table2
   WHERE --Some Condition

и, возможно, другой исполняемый оператор SQL будет выглядеть так

INSERT INTO Database1.Table3(column1, column2, column3, column4)
   SELECT column1, column2, column3, column4
   FROM Database3.Table3
   WHERE --Some Condition

Хорошо, в основном мой процесс такой

Execute Sql to insert into temp Tables --> Insert into a permanent Table from Temp Tables

Сверху два оператора SQL, мой выполненный результат из базы данных2 или 3 или может быть 4,5 и т. Д. Я отправлюсь в свою базу данных1 для постоянного хранения. Короче говоря, я хочу сделать еще одну копию данных, которые поступают из другого источника базы данных и сохраняются в моей локальной базе данных для дальнейшей обработки.

Моя основная проблема заключается в том, что мой ответственный (или менеджер) сказал мне, чтобы я выбросил все выполненные результаты в таблицу TEMP или #Table перед выполнением в перманент.

Примерно так:

INSERT INTO #Table3(column1, column2, column3, column4)
   SELECT column1, column2, column3, column4
   FROM Database3.Table3
   WHERE --Some Condition

Я провел некоторое исследование #Temp таблиц и обнаружил, что большинство из них создаются с помощью столбца 'FIX', например

CREATE TABLE #Table
(
    column1 VARCHAR(10),
    column2 VARCHAR(10),
    column3 VARCHAR(10)
)

ПРОБЛЕМА: есть ли способ создать его с динамическими столбцами? Более подробный способ задать вопрос, есть ли способ вставить в таблицу #Temp без префикса столбца? Потому что для меня невозможно создать кучу временных таблиц для каждого из выполняемых SQL.

Спасибо

PS 1: Я новичок в SQL Server, пожалуйста, не стесняйтесь высказать мою ошибку или ошибку. Мы все учимся на ошибках.

PS 2: Извините за мой плохой уровень английского, я старался изо всех сил, чтобы прояснить его более четко.

С уважением:

LiangCk

1 Ответ

5 голосов
/ 03 ноября 2011

Вы говорите, что хотите что-то вроде



INSERT INTO #Table3(coloum1,coloum2,coloum3,coloum4)
Select coloum1,coloum2,coloum3,coloum4
FROM Database3.Table3
WHERE --Some Condition


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

Это будет работать:



Select coloum1,coloum2,coloum3,coloum4
INTO #Table3
FROM Database3.Table3
WHERE --Some Condition


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

Похоже, вы хотите сделать что-то большее, чем эта ..Я не могу понять, что это такое, но звучит так, как будто вы можете выбрать все ваши данные из разных таблиц в одну временную таблицу (я не знаю, почему вы захотите это сделать) ... Если этоcase тогда UNION или UNION ALL должны работать.Вы все еще можете использовать их с динамически создаваемой временной таблицей.



Select coloum1,coloum2,coloum3,coloum4
INTO #Table3
FROM Database3.Table3
WHERE --Some Condition

UNION

Select column1, column2, column3, null
FROM Database1.Table1
WHERE --Some condition


Приведенный выше null просто дает 2-му выбору то же количество столбцов, что и первому (я использовал оба выбора из вашего поста);это требование для UNION.

...