У меня есть одна огромная хранимая процедура, которая собирает данные из таблиц в 3 таблицы тем (табличные переменные).Сохраненная процедура, выполняющая оператор select неопределенно
@table1: 50,000 records
@table2: 23,000 records
@table3: 15,000 records
После получения данных, хранимая процедура выполняется один большой оператор выбора (180 строк), который преобразует данные из этих таблиц временных и некоторых физических таблиц в формате XML и возвращается клиенту.
Я не могу опубликовать хранимую процедуру здесь из-за конфиденциальности проекта. Хранимая процедура застревает в этом заявлении select
. Даже после запуска хранимой процедуры в течение 24 часов она не завершила выполнение.
Затем я заменил все переменные таблицы локальной временной таблицей (#table1, #table2, #table3
). К моему удивлению, хранимая процедура успешно выполнена с теми же данными.
Я не могу понять разницу b/w два подхода; и почему хранимая процедура выполнялась неограниченно с table variables
?
Кто скажет, что переменные таблицы находятся в памяти? http://blogs.msdn.com/b/sqlserverstorageengine/archive/2008/03/30/sql-server-table-variable-vs-local-temporary-table.aspx - переменные таблицы могут жить на диске, в tempdb - быть точным. – TomTom
@TomTom Спасибо, что исправил меня, отредактировал мое сообщение – Jaguar