Я успешно развернул множество пакетов SSIS (в SQL Server 2008 R2).Таблица Temp, потерянная немедленно в SSIS
Я обнаружил проблему, которая меня тошнит. Изучите основной следующий поток.
В «Загрузка файлов с FTP» Я поднимаю новые файлы, которые я хочу работать, и загрузить их на свой локальный диск, сохраняя подобранные файлы, так что они могут повторяться при в процессе каждого Файл foreach.
В 'Создать временную таблицу' Я создаю временную таблицу, как, например:
IF not exists (SELECT * FROM tempdb.dbo.sysobjects WHERE name='##tempProcessFiles' and xtype='U')
CREATE TABLE ##tempProcessFiles
(
--my columns
)
GO
В 'усечение Temp таблицы' Я делаю:
TRUNCATE TABLE ##tempProcessFiles
В принципе, я забрать некоторые файлы , создайте временную таблицу, а затем пропустите каждый файл, загрузив необходимый мусор в мою базу данных. Чтобы убедиться, что все выполняется гладко, я усекаю временную таблицу на каждой итерации, поэтому у меня есть свежая таблица для работы. На последнем шаге этого пакета я удаляю временную таблицу. Я также отбрасываю временную таблицу OnError.
Проблема заключается в том, что когда я планирую этот парень, создать временную таблицу выполняется отлично, но как только он достигнет «truncate temp table», он выдает исключение, поскольку временная таблица не существует. В частности:
Executing the query "TRUNCATE TABLE ##tempProcessFiles" failed with the following error: "Cannot find the object "##tempProcessFiles" because it does not exist or you do not have permissions.". Possible failure reasons: Problems with the query, "ResultSet" property not set correctly, parameters not set correctly, or connection not established correctly.
Запуск этого пакета в режиме отладки не воссоздает этот сценарий. Все работает нормально.
Я обнаружил (после многих дней разочарования, преследуя идеи, которые посылали меня кругами), что, удалив инструкцию GO в «Создать таблицу темп», мой пакет будет выполняться нормально.
Было установлено, что ошибок или случайного падения моей временной таблицы не было. Кроме того, у меня всегда сохранялась информация о безопасности как ложная, всегда проверялась проверка достоверности, как всегда; но моя задача temp table temp не была запущена - я даже попытался развернуть ее с отключенным. Ни один из моих других пакетов не использовал эту глобальную таблицу temp, и в базе данных не было запланированных заданий или триггеров, которые отбрасывали это или что-то смешное.
Все, что я могу определить, заключается в том, что оператор GO приводил к тому, что моя сессия в базу данных прекращалась и вызывала немедленную замену моей таблицы temp. Это то, как работают операторы GO в SSIS? Если бы я запускал сценарий на SQL Server с использованием того же синтаксиса, что и у меня в моем пакете, я определенно не испытал бы такого рода вещи, поэтому он меня бросил на цикл. Но я не администратор базы данных, поэтому это, вероятно, что-то фундаментальное или тонкое в этой области работы.
Может ли кто-нибудь объяснить, что на самом деле произошло здесь? Или мне нужно будет предоставить более подробную информацию о моем пакете, чтобы получить достаточный ответ? Единственное изменение, которое я сделал, это удалить GO из «Create Temp Table», так что это было определенное исправление.
Почему вы усекаете временную таблицу? И почему это глобальная временная таблица? – gbn
Вы должны использовать глобальные временные таблицы в SSIS. Прочтите весь этот блог, если вы сомневаетесь во мне: http://www.mssqltips.com/sqlservertip/2826/how-to-create-and-use-temp-tables-in-ssis/. Кроме того, я усекаю временную таблицу, потому что я загружаю ее данными из каждого файла. – Anonymouse
Я бы использовал сохраненные таблицы в схеме wrk. Я бы не использовал временные таблицы вообще. Пример: если я загружаю Data.Foobar, у меня был бы wrk.foorbar для постановки данных. Я бы не использовал ## foobar ... – gbn