#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.