Массовая вставка SQL Server завершается неудачно (связано с сетью) - PullRequest
1 голос
/ 15 сентября 2009

Я довольно новичок в SQL Server.

Я пытаюсь выполнить массовую вставку в таблицу, используя команду в SQL Server Management Studio (2005):

ОБЪЕМНАЯ ВСТАВКА Таблица1 ИЗ 'c: \ text.txt' WITH (FIELDTERMINATOR = '|')

Я получаю ошибку:

Сообщение 4860, Уровень 16, Состояние 1, Строка 1 Невозможно выполнить массовую загрузку. Файл "c: \ text.txt" не существует.

Я уверен, что файл действительно существует.

У меня такое ощущение, что он ищет файл на локальном жестком диске, где бы ни находился сервер. Это тот случай? Если да, то как вы вообще решаете эту проблему? (к сведению, я пытался указать сетевой адрес моего ПК при вводе местоположения текстового файла, но я получаю ошибку разрешения. Кроме того, я заранее знаю, что моя компания не разрешает размещать файлы на сервере ).

Ответы [ 4 ]

1 голос
/ 28 сентября 2009

Я бы согласился, что проблема в том, что файл находится на диске C, а не на диске сервера.

Если это проблема с разрешениями, пытались ли вы создать на рабочей станции общий файловый ресурс, с которого у сервера есть разрешения на чтение? Может быть, что-то вроде \ YourWorkstation \ SQLFile, а затем предоставить всем (или Гостю, в зависимости от того, как настроены ваши сетевые разрешения) доступ на чтение для него?

Если вы не можете создать общий ресурс на своем ноутбуке или по каким-то причинам не можете предоставить ему права, существует ли в офисе общий файловый ресурс, к которому у вас есть права, и этот SQL также может читать от? Может быть NAS или «Общая» сетевая папка?

1 голос
/ 16 сентября 2009

Вы создали на вашей машине общий диск, который может видеть сервер? Если это так, то вам просто нужно сослаться на путь, включающий имя вашего компьютера вместо C:

1 голос
/ 28 сентября 2009

В SQL Server нет оператора SQL, который считывает данные со стороны клиента (как отмечали другие авторы). Другие продукты RDBMS реализуют это (например, оператор Postgres COPY позволяет вам указать файл на сервере или файл на клиенте, который будет считываться библиотекой соединений db на стороне клиента).

Вы можете добиться перемещения данных из файла на клиенте в таблицу на SQL Server, используя программу командной строки bcp .

bcp позволяет копировать данные из локального файла в таблицу на сервере или из таблицы (или запроса выбора) на сервере в локальный файл. Например:

bcp servername.dbname.tablename in c:\temp.txt -T -c

скопирует файл с разделителями-вкладками (temp.txt) в указанную таблицу (при условии, что файл содержит правильное количество столбцов).

Я не уверен, поможет ли это, но это единственный способ перенести данные из файла клиента в таблицу сервера, не предоставляя серверу некоторый доступ через сеть к файлу данных на клиенте.

0 голосов
/ 15 сентября 2009

Да, он будет искать файл на самом сервере SQL.

Если вы можете сопоставить сетевой диск с диском C вашего SQL-сервера, вы можете просто скопировать файл перед запуском массовой вставки.

Если вы абсолютно не можете получить доступ к файловой системе сервера, тогда вы можете посмотреть на что-то вроде этого:

  • напишите программу, которая читает ваш текстовый файл и вставляет содержимое в одну запись во временной таблице с текстовым полем, возможно, используя хранимую процедуру
  • чтобы программа выполнила команду bcp для экспорта данных из временной таблицы в текстовый файл в локальной файловой системе сервера SQL в папку, в которой находится учетная запись, под которой работает служба SQL разрешение на запись
  • программа запускает команду массовой вставки с указанием пути к текстовому файлу на сервере
  • удалить текстовый файл и временную таблицу
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...