Почему bcp не может выполнять процедуры, имеющие временную таблицу (#TempTable)?

#stored-procedures #bcp #sql-server-2008 #sql-agent-job

#хранимые процедуры #bcp #sql-server-2008 #sql-agent-job

Вопрос:

Недавно мне было поручено создать задание SQL Server для автоматизации создания файла CSV. Существовал существующий код, в котором использовался набор таблиц #temp.

Когда я настраивал задание на выполнение с помощью BCP, вызывающего существующий код (преобразованный в процедуру), я продолжал получать ошибки:

 SQLState = S0002, NativeError = 208
Error = [Microsoft][SQL Native Client][SQL Server]Invalid object name #xyz
 

Как описано в других сообщениях, для решения проблемы многие люди рекомендуют преобразовать все #tempTables в @tableVariables .

Однако я хотел бы понять, ПОЧЕМУ BCP, похоже, не может использовать #tempTables? Когда я выполняю ту же процедуру из SSMS, она работает !? Почему?

Я провел быстрый и простой тест, используя глобальные временные таблицы в рамках процедуры, и, похоже, он прошел успешно с помощью задания с использованием BCP, поэтому я предполагаю, что это связано с областью действия #tempTables !?

Заранее спасибо за ваши ответы / разъяснения.

DTML

Ответ №1:

Вы правильно догадались, что это проблема области видимости для таблиц #temp.

BCP создается как отдельный процесс, поэтому таблицы больше не доступны для новых процессов. SSMS, вероятно, использует подпроцессы, поэтому у них все равно будет доступ к таблицам #temp.