Вставьте файл клиента в столбец базы данных сервера

Я хочу написать запрос, который вставляет файл, который находится на клиенте (веб-сервер C #), в столбец на сервере базы данных (SQL Server), что-то вроде INSERT … SELECT * FROM OPENROWSET(BULK…) , но без необходимости сохранять сначала на сервере.

Возможно ли это в SQL?

Хотя ваш контекст не установлен, я предполагаю, что вы намереваетесь запустить его из SSMS, а не из OSQL, сценария PowerShell или каким-либо другим способом.

Файл не должен находиться на физическом поле, на котором работает SQL Server, но SQL Server ему нужен. Я считаю, что типичным подходом для сервера приложений было бы скопировать файл в общий репозиторий, а затем передать его на SQL Server через ссылку UNC . Синтаксис для этого является относительно тривиальным и может быть найден в разделе Импорт объемных данных с помощью BULK INSERT или OPENROWSET (BULK …) .

Если вместо этого вы заинтересованы в предоставлении механизма для SQL Server для сохранения файла из какой-либо операции потока, когда клиент напрямую передает файл, и нет общего репозитория, я не знаю, как это сделать , Даже если вы используете объект SQL FILESTREAM, вам по-прежнему требуется доступное местоположение NTFS для потоковой передачи. См. Сохранение и извлечение файла с помощью FileStream SQL Server 2008 .

В какой-то момент серверу придется иметь руку на файл. Это не означает, что сервер должен хранить файл, но файл должен попасть на сервер, чтобы его можно было прочитать и вставить в db. Как правило, это достигается с помощью формы и ввода типа файла. На сервере вы можете использовать загруженный файл для создания запроса, а затем удалить его.

Тем не менее, сохранение файлов в базе данных спорной практики. В зависимости от типа и размера файлов, которые вы храните, ваша база данных может быстро масштабироваться. Во-первых, это делает резервные копии более медленными и более склонными к сбою, а также список белья других потенциальных ловушек. Проверьте этот вопрос на SO: Хранение изображений в DB – Yea или Nay? Как вы можете видеть из ответов, необходимо сделать ряд соображений, но хорошим правилом является не делать этого, если у вас нет веских причин для этого.

В SQL Server BLOB Data в .NET: учебное пособие Мохаммад Эльсхайми объясняет, как это можно сделать:

 using(SqlConnection con = new SqlConnection(conStr) ) using(SqlCommand command = new SqlCommand("INSERT INTO MyFiles VALUES (@Filename, @Data)", con) ) { command.Parameters.AddWithValue("@Filename", Path.GetFileName(filename)); command.Parameters.AddWithValue("@Data", File.ReadAllBytes(filename)); connection.Open(); } 

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

  • Ввод строки SQL-запроса
  • SQL Server генерирует уникальное значение
  • ASP.Net вставляет данные из текстового поля в базу данных
  • Вставка символа в начале строки в SQL
  • ошибка при использовании подзапроса в операторе вставки
  • Справка по вводу запроса SQL Server
  • SQL Server, не может вставить нуль в поле первичного ключа?
  • не может вставлять данные в базу данных
  • Microsoft Sql Management Studio, агент SQL Server, создайте вложенный массив с динамическими параметрами
  • Сравнение с вставкой в ​​запрос лучше
  • Объединение двух значений в Insert - SQL
  • Interesting Posts

    Как отформатировать дату на MS SQL Server 2008

    Можем ли мы выполнять операции DML, такие как Удалить, используя предложение Group by?

    Как вернуть nvarchar (max) в CLR UDF?

    Microsoft SQL Server 2005 проверяет, не потеряна ли временная таблица

    Чтение XML-запроса через sql-запрос

    Как мне вернуть весь диапазон дат в SQL между двумя датами, даже если данных нет?

    Вычислить режим (или частоту) распределения значения с течением времени в SQL Server

    Сложный фильтр запросов SQL

    BIRT 4.4.0 ПАРАМЕТРЫ, округленные во время выполнения

    SQLCMD MODE – неправильный синтаксис рядом с 'S'

    Отключить сообщения в наборе результатов SQL2008

    Вставить идентификатор записи и возврата в SQL UDF?

    SQL вставляет несколько строк в таблицу, используя переменную с несколькими значениями в качестве одного из значений для вставки

    SQL Вместо триггера иногда не срабатывает?

    Существует ли наилучшая практика подключения к базе данных SQL Server из двухуровневого приложения?

    Давайте будем гением компьютера.