Внутри таблицы переменные могут быть созданы в tempdb
, а также во временных таблицах.
Они различаются только по объему и постоянству.
Вопреки распространенному мнению, операции с временными таблицами влияют на журнал транзакций, несмотря на тот факт, что они не подлежат контролю транзакций.
Чтобы проверить это, запустите этот простой запрос:
DECLARE @mytable TABLE (id INT NOT NULL PRIMARY KEY)
;
WITH q(num) AS
(
SELECT 1
UNION ALL
SELECT num + 1
FROM q
WHERE num <= 42
)
INSERT
INTO @mytable (id)
SELECT num
FROM q
OPTION (MAXRECURSION 0)
DBCC LOG(tempdb, -1)
GO
DBCC LOG(tempdb, -1)
GO
и просмотрите последние записи из обоих наборов записей.
В первом наборе записей вы увидите 42
LOP_INSERT_ROWS
записей.
Во втором наборе записей (который находится в другом пакете) вы увидите 42
LOP_DELETE_ROWS
записей.
Они являются результатом выхода табличной переменной из области видимости и удаления ее записи.