TSQL Многократное использование таблицы, определенной WITH - PullRequest
2 голосов
/ 28 марта 2012

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

Итак, у меня есть что-то вроде этого.

With temp as (
Select * from Table1 
)
INSERT INTO Table2 (table1_id) select id from temp
SELECT * from temp 

И я получаю

Ошибка: неверное имя объекта 'temp'.SQLState: S0002 ErrorCode: 208

Разве это не то, для чего предназначена команда with?

Ответы [ 2 ]

5 голосов
/ 28 марта 2012

С MSDN :

Общее табличное выражение (CTE) можно рассматривать как временное результирующий набор, определенный в пределах области выполнения одного Оператор SELECT, INSERT, UPDATE, DELETE или CREATE VIEW.

Поскольку оператор insert и оператор select являются двумя различными операторами, CTE действителен только для insert.

В качестве альтернативы вы можете использовать OUTPUT предложение :

WITH temp AS (
    SELECT * FROM Table1 
)
INSERT INTO Table2 (table1_id) 
OUTPUT inserted.id
SELECT id FROM temp
0 голосов
/ 28 марта 2012

Есть альтернативный способ достичь того, что вы хотите сделать. Попробуйте следующим образом.

Select * into #temp_table
from Table1 

INSERT INTO Table2 (table1_id) select id from #temp_table
SELECT * from #temp_table
...