Ошибка = [Microsoft] [Драйвер ODBC 13 для SQL Server] Невозможно открыть файл данных хоста BCP - PullRequest
1 голос
/ 03 октября 2019

У меня есть 1 таблица, которая содержит ключ и файл ref в конце каждой записи. У меня также есть другая таблица, в которой есть много записей с КЛЮЧОМ, содержащимся против каждой записи. Затем я связываю обе таблицы ключом и хочу экспортировать данные на основе файла ref. Когда я запускаю его как запрос на выборку, он работает нормально ... но когда я запускаю его с целью создания файла для каждого файла ref, он завершается с ошибкой в ​​заголовке, которой предшествует строка 'SQLState = S1000, NativeError = 0'. У меня есть доступ к каталогу, и я запускаю код на сервере. Любое руководство будет оценено.

    DECLARE @File_number INT
    DECLARE @SQL VARCHAR(8000)
    DECLARE file_num CURSOR READ_ONLY FAST_FORWARD LOCAL FOR 
        SELECT DISTINCT File_number FROM map_sequence_tranid ORDER BY 1
    OPEN file_num
    FETCH NEXT FROM file_num INTO @File_number
    WHILE @@FETCH_STATUS = 0 BEGIN
    SELECT @SQL = 'bcp "SELECT b.File_number, a.[Field1], b.[Field2] from Table1 a, Table2 b where a.[Key]=b.[key] and b.File_number=' + CAST(@File_number as varchar(10)) + ' order by a.[key]" queryout ''E:\Path\file' + CAST(@File_number AS VARCHAR(10)) + '.txt'' -c -T -t'','' -S ' + @@SERVERNAME
    EXEC master..xp_cmdshell @SQL
    FETCH NEXT FROM file_num INTO @File_number
END
CLOSE file_num
DEALLOCATE file_num

1 Ответ

0 голосов
/ 03 октября 2019

Доступ к общему ресурсу нужен не вашей учетной записи. Поскольку вы запускаете команду BCP с помощью команды "xp_cmdshell", учетная запись, которая фактически выполняет команду bcp, является той же учетной записью, на которой запущена служба SQL Server на блоке SQL Server. Когда вы используете «xp_cmdshell», вы оставляете сеанс / аутентификацию позади и передаете управление новому сеансу вне SQL Server. Это делается с использованием учетной записи, на которой запущена служба SQL Server, а команда выполняется в ОС, на которой работает SQL Server. Скорее всего, вы даже не можете войти в ОС под SQL Server.

Вы должны подтвердить, что учетная запись службы SQL имеет доступ к общему ресурсу.

Я не уверен, что этоваша проблема, но это может быть. Вы можете проверить другие возможности:

  1. Напечатайте содержимое команды @SQL вместо ее выполнения. Скопируйте это значение в командное окно и попробуйте запустить команду самостоятельно. Это проверит, что команда действительна и что такие пути, как пути, действительны.

  2. Если вы можете, войдите на физический сервер (windows?), На котором работает ваш SQL Server. Войдите в систему как учетная запись службы SQL Server. Затем попробуйте выполнить команду bcp в окне командной строки. Это наиболее полный тест, но обычно у нас нет разрешения для аутентификации с использованием учетной записи, которая используется для запуска службы SQL Server.

...