Sql прочитать текстовый файл

Обновлено: 07.07.2024

У меня есть длинный список около 5000+ идентификаторов (номеров).

Я хотел бы знать, если есть способ позвонить, чтобы прочитать идентификаторы из TXT-файла вместо ввода всех 5000 в запросе?

3 ответа

У вас есть несколько вариантов, один из которых мой рекомендуемый.

Создайте таблицу в вашей базе данных примерно так:

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

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

Поскольку ID_Comparer и (при условии, что) идентификатор main_table индексируются / кодируются, сопоставление должно быть относительно быстрым.

Эта опция похожа на приведенную выше, но немного помогает в параллелизме. Это означает, что если приложение 1 хочет сравнить 2000 идентификаторов, тогда как приложение 2 хочет одновременно сравнить 5000 идентификаторов с вашей основной таблицей, вы не захотите удалять данные из таблицы сравнения. Итак, немного измените таблицу.

Затем используйте ваш любимый язык программирования для создания GUID. Загрузите все ID и тот же GUID в таблицу следующим образом:

Другой процесс, делающий то же самое, будет загружать свои собственные идентификаторы с GUID.

Теперь ваш выбор:

После того, как вы получите свои данные, обязательно сделайте delete from ID_Comparer where token = '<your guid>' - это было бы неплохо.

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

Поскольку ID_Comparer и (при условии, что) идентификатор main_table индексируются / кодируются, сопоставление должно быть относительно быстрым, даже если GUID является дополнительным поиском по ключу.

Вместо создания таблицы вы можете создать большой SQL-запрос, например, так:

Если производительность приемлема и если создание новой таблицы, как в варианте 1, вам не подходит, вы можете попробовать один из этих методов.

(при условии, что) идентификатор main_table индексируется / кодируется, индивидуальное сопоставление может привести к более быстрому запросу, а не к сопоставлению с длинным списком значений, разделенных запятыми. Это предположение. Вам нужно будет увидеть план запроса и выполнить его для контрольного примера.

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

Шаг 1: Скопируйте все свои значения в возвышенный или блокнот ++. Шаг 2: Нажмите Ctrl + H. Выберите опцию «Регулярные выражения». Шаг 3: Добавьте «,» в конец каждой строки,

Введите $ в поле «Найти что», и "," в поле "Заменить на". Затем нажмите «Заменить все».

Затем просто скопируйте и вставьте значения в ваш запрос SQL

PS: удалите запятую из последнего значения.

Допустим, у вас есть таблица userdogs со многими пользователями и именами их собак: userdogs :

Также у вас есть файл friendsfile.txt , где есть имена ваших друзей. И вы хотите выбрать только своих друзей из таблицы userdogs .

1. Создайте новую таблицу и вставьте содержимое из файла:

CREATE TABLE friends (name varchar(200));

Если файл выглядит примерно так :

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

Считывает значения text, ntext или image из столбцов text, ntext или image. Считывание начинается с указанной позиции и выполняется для указанного числа байтов.

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

Синтаксис

Ссылки на описание синтаксиса Transact-SQL для SQL Server 2014 и более ранних версий, см. в статье Документация по предыдущим версиям.

Аргументы

table . column
Имя таблицы и столбца, откуда должны быть считаны данные. Имена таблиц и столбцов должны соответствовать правилам для идентификаторов. Указание имен таблицы и столбца обязательно; однако указание имени базы данных и имен владельца является необязательным.

text_ptr
Действительный текстовый указатель. Значение text_ptr должно иметь тип binary(16) .

offset
Это число байтов, если используется тип данных text или image. Это также может быть число символов, если используется тип данных ntext, которые следует пропустить, прежде чем приступить к чтению данных типа text, image или ntext.

size. Число байтов, если используется тип данных text или image. Это также может быть число байтов для символов, если для чтения используется тип данных ntext. Если для аргумента size указано значение 0, считывается 4 КБ данных.

HOLDLOCK
Вызывает блокировку считывания для текстового значения до окончания транзакции. Другие пользователи могут считывать значение, но не могут изменять его.

Remarks

Используйте функцию TEXTPTR, чтобы получить допустимое значение аргумента text_ptr. TEXTPTR возвращает указатель в столбец text, ntext или image в указанной строке. TEXTPRT также может возвращать указатель в столбец text, ntext или image в последней строке, возвращаемой запросом, если возвращается более одной строки. Поскольку TEXTPTR возвращает 16-байтовую двоичную строку, рекомендуется объявить локальную переменную для хранения текстового указателя, а затем использовать эту переменную с READTEXT. Дополнительные сведения об объявлении локальной переменной см. в статье DECLARE @local_variable (Transact-SQL).

В SQL Server внутристрочные текстовые указатели могут существовать, но при этом быть недействительными. Дополнительные сведения о параметре text in row см. в статье sp_tableoption (Transact-SQL). Дополнительные сведения о допустимости текстовых указателей см. в статье sp_invalidate_textptr (Transact-SQL).

Значение функции @@TEXTSIZE переопределяет размер, указанный для READTEXT, если оно меньше размера, указанного для READTEXT. Функция @@TEXTSIZE указывает предельное число возвращаемых байтов данных, устанавливаемое инструкцией SET TEXTSIZE. Дополнительные сведения о том, как задать значение TEXTSIZE для сеанса, см. в статье SET TEXTSIZE (Transact-SQL).

Разрешения

Разрешения READTEXT по умолчанию принадлежат пользователям, имеющим разрешения SELECT для указанной таблицы. Разрешения могут быть переданы при передаче разрешений SELECT.

Примеры

В примере ниже считываются символы со второго по 26-й в столбце pr_info таблицы pub_info .

Для выполнения этого примера необходимо установить образец базы данных pubs.

В этом разделе показано, как подключаться к источникам данных "Неструктурированный файл" (текстовый файл) со страницы Выбор источника данных или Выбор назначения в мастере импорта и экспорта SQL Server. Для неструктурированных файлов эти две страницы мастера содержат разные наборы параметров, поэтому в этом разделе источник "Неструктурированный файл" и назначение "Неструктурированный файл" рассматриваются отдельно.

Альтернатива для импорта простого текста

Если вы хотите импортировать текстовый файл в SQL Server и не нуждаетесь во всех параметрах конфигурации, доступных в мастере экспорта и импорта, рекомендуется использовать мастер импорта неструктурированных файлов в SQL Server Management Studio (SSMS). Дополнительные сведения см. в следующих статьях:

Подключение к источнику "Неструктурированный файл"

Параметры для источников данных типа "Неструктурированный файл" занимают четыре страницы. Это довольно много. Однако вам не придется тратить свое время, изучая их все. Ниже перечислены задачи, которые следует принять во внимание.

Page Рекомендация Тип
Обязательно обновите параметры в разделе Формат. Рекомендуемая
Не забудьте установить разделители столбцов и строк (для файла с разделителями) или пометить столбцы (для файла с полями фиксированного размера). Рекомендуемая
При необходимости проверьте типы данных и другие свойства, по умолчанию назначенные для столбцов. Необязательно
При необходимости просмотрите образец данных, используя заданные вами параметры. Необязательно

На странице Общие найдите и выберите файл, а затем проверьте параметры в разделе Формат.

Подключение через неструктурированный файл: "Общие"

Задаваемые параметры (страница Общие)

Имя файла
Введите путь и имя для неструктурированного файла.

Обзор
Найдите неструктурированный файл.

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

Юникод
Укажите, использует ли файл Юникод. При использовании Юникода невозможно указать кодовую страницу.

Кодовая страница
Укажите кодовую страницу для текста не в Юникоде.

Формат
Укажите, используется ли в файле форматирование с разделителями, с полями фиксированного размера или форматирование с неровным правым краем.

Значение Описание
С разделителями Столбцы разделяются разделителями. Укажите разделитель на странице Столбцы.
Фиксированная ширина Столбцы имеют фиксированную ширину.
Переменная ширина В файлах с текстом без выключки вправо каждый столбец имеет фиксированную ширину, за исключением последнего столбца, разделенного разделителем строк.

Ограничитель текста
Укажите ограничитель текста, который следует использовать (если он есть). Например, можно указать, что текстовые поля должны быть заключены в кавычки. (Это свойство применяется только к файлам с разделителями.)

После выбора ограничителя текста невозможно повторно выбрать параметр None. Тип None предназначен для отмены выбора ограничителя текста.

Разделитель строки заголовка
Выберите разделитель из списка разделителей строк заголовка или введите текст разделителя.

Значение Описание
В качестве разделителей для строки заголовка используются сочетания символов возврата каретки и перевода строки.
В качестве разделителей для строки заголовка используются символы возврата каретки.
В качестве разделителей для строки заголовка используются символы перевода строки.
Точка с запятой В качестве разделителя для строки заголовка используется точка с запятой.
Двоеточие В качестве разделителя для строки заголовка используется двоеточие.
Запятая В качестве разделителя для строки заголовка используется запятая.
Табуляция В качестве разделителя для строки заголовка используется символ табуляции.
Вертикальная черта В качестве разделителя для строки заголовка используется вертикальная черта.

Пропускаемые строки заголовка
Укажите число строк с начала файла, которые нужно пропустить (если такие есть).

Имена столбцов в первой строке данных
Укажите, содержит ли первая строка (после всех пропущенных) имена столбцов.

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

Неструктурированный файл, с разделителями, страница "Столбцы"

<a name="options-to-specify-columns-page---format--delimited">Указываемые параметры (страница Столбцы – "Формат" = "С разделителями")

Разделитель строк
Выберите из списка доступных разделителей строк или введите текст разделителя.

Значение Описание
Строки разделяются сочетанием символов возврата каретки и перевода строки.
Строки разделяются символом возврата каретки.
Строки разделяются символом перевода строки.
Точка с запятой Строки разделяются точкой с запятой.
Двоеточие Строки разделяются двоеточием.
Запятая Строки разделяются запятой.
Табуляция Строки разделяются символом табуляции.
Вертикальная черта Строки разделяются вертикальной чертой.

Разделитель столбцов
Выберите из списка доступных разделителей столбцов или введите текст разделителя.

Значение Описание
Столбцы разделяются парой символов возврата каретки и перевода строки.
Столбцы разделяются символом возврата каретки.
Столбцы разделяются символом перевода строки.
Точка с запятой Столбцы разделяются символом точки с запятой.
Двоеточие Столбцы разделяются символом двоеточия.
Запятая Столбцы разделяются символом запятой.
Табуляция Столбцы разделяются символом табуляции.
Вертикальная черта Столбцы разделяются символом вертикальной черты.

Предварительный просмотр строк
Просмотр образца данных в неструктурированном файле, разделенном на столбцы и строки с помощью выбранных параметров.

Обновить
Просмотрите результаты изменения разделителей, нажав кнопку Обновить. Эта кнопка становится видимой только после изменения других параметров соединения.

Сбросить столбцы
Восстановление исходных столбцов.

На странице Столбцы проверьте список обнаруженных мастером столбцов и разделителей. На следующем снимке экрана страница показана так, как если бы вы выбрали для неструктурированного файла формат Фиксированная ширина.

Неструктурированный файл, фиксированная ширина, страница "Столбцы"

<a name="options-to-specify-columns-page---format--fixed-width">Указываемые параметры (страница Столбцы – "Формат" = "Фиксированная ширина")

Шрифт
Выбор шрифта для предварительного просмотра данных.

Столбцы источника данных
Настройте ширину строк, перемещая красный вертикальный маркер, а также ширину столбцов, щелкнув линейку в верхней части окна предварительного просмотра

Ширина строки
Задайте длину строки перед добавлением разделителей для отдельных столбцов. Или переместите красный вертикальный маркер в окне предварительного просмотра, чтобы отметить конец строки. Значение ширины строки автоматически обновляется.

Сбросить столбцы
Восстановление исходных столбцов.

На странице Столбцы проверьте список обнаруженных мастером столбцов и разделителей. На следующем снимке экрана страница показана так, как если бы вы выбрали для неструктурированного файла формат Без выравнивания по правому краю.

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

Неструктурированный файл, без выравнивания по правому краю, страница "Столбцы"

<a name="options-to-specify-columns-page---format--ragged-right">Указываемые параметры (страница Столбцы – "Формат" = "Без выравнивания по правому краю")

Шрифт
Выбор шрифта для предварительного просмотра данных.

Столбцы источника данных
Настройте ширину строк, перемещая красный вертикальный маркер, а также ширину столбцов, щелкнув линейку в верхней части окна предварительного просмотра

Разделитель строк
Выберите из списка доступных разделителей строк или введите текст разделителя.

Значение Описание
Строки разделяются сочетанием символов возврата каретки и перевода строки.
Строки разделяются символом возврата каретки.
Строки разделяются символом перевода строки.
Точка с запятой Строки разделяются точкой с запятой.
Двоеточие Строки разделяются двоеточием.
Запятая Строки разделяются запятой.
Табуляция Строки разделяются символом табуляции.
Вертикальная черта Строки разделяются вертикальной чертой.

Сбросить столбцы
Восстановление исходных столбцов.

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

Неструктурированный файл, с разделителями, страница "Дополнительно"

Обратите внимание, что на этом снимке экрана столбец идентификатор, содержащий числа, изначально имеет тип данных "Строка".

Задаваемые параметры (страница Дополнительно)

Задать параметры каждого столбца
Выберите столбец в левой панели для просмотра его свойств в правой панели. В следующей таблице приведены описания свойств столбцов. Некоторые перечисленные свойства можно настраивать только для определенных форматов неструктурированного файла и столбцов с данными определенных типов.

. Столбцы разделяются парой символов возврата каретки и перевода строки.

. Столбцы разделяются символом возврата каретки.

. Столбцы разделяются символом перевода строки.

Точка с запятой . Столбцы разделяются символом точки с запятой.

Двоеточие . Столбцы разделяются символом двоеточия.

Запятая . Столбцы разделяются символом запятой.

Табуляция . Столбцы разделяются символом табуляции.

Создать
Добавьте новый столбец, нажав кнопку Создать. По умолчанию, кнопка Создать добавляет новый столбец в конец списка. Эта кнопка также имеет следующие параметры, доступные в раскрывающемся списке.

Значение Описание
Добавить столбец Добавить новый столбец в конец списка.
Вставить до Вставить новый столбец перед выделенным столбцом.
Вставить после Вставить новый столбец после выделенного столбца.

Удаление
Выберите столбец и затем удалите его, нажав кнопку Удалить.

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

Щелкните Предложить типы. , чтобы открыть окно Предположение типов столбцов.

Диалоговое окно с предложениями о типах при подключении к неструктурированному файлу

После того как вы выберете параметры в диалоговом окне Предлагаемые типы столбцов и нажмете кнопку ОК, мастер может изменить типы данных в некоторых столбцах.

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

Подключение через неструктурированный файл: "Дополнительно" (после)

На странице Предварительный просмотр убедитесь, что список столбцов и образец данных соответствуют вашим ожиданиям.

Неструктурированный файл, страница "Предварительный просмотр"

Задаваемые параметры (страница Предварительный просмотр)

Количество пропускаемых строк данных
Укажите, сколько строк необходимо пропустить в начале неструктурированного файла.

Предварительный просмотр строк
Просмотр данных выборки в неструктурированном файле, разделенном на столбцы и строки согласно выбранным параметрам.

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

Дополнительные сведения о странице Предварительный просмотр см. на следующей странице справочника по службам Integration Services: Редактор диспетчера соединений с неструктурированными файлами (страница "Предварительный просмотр").

Подключение к назначению "Неструктурированный файл"

Для назначения неструктурированного файла доступна всего одна страница с параметрами, как показано на следующем снимке экрана. Найдите и выберите файл, а затем проверьте параметры в разделе Формат.

Подключение к назначению "Неструктурированный файл"

Задаваемые параметры (страница Выбор назначения)

Имя файла
Введите путь и имя для неструктурированного файла.

Обзор
Найдите неструктурированный файл.

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

Юникод
Укажите, использует ли файл Юникод. При использовании Юникода невозможно указать кодовую страницу.

Кодовая страница
Укажите кодовую страницу для текста не в Юникоде.

Формат
Укажите, используется ли в файле форматирование с разделителями, с полями фиксированного размера или форматирование с неровным правым краем.

Значение Описание
С разделителями Столбцы разделяются разделителями. Укажите разделитель на странице Столбцы.
Фиксированная ширина Столбцы имеют фиксированную ширину.
Переменная ширина В файлах с текстом без выключки вправо каждый столбец имеет фиксированную ширину, за исключением последнего столбца, разделенного разделителем строк.

Ограничитель текста
Укажите ограничитель текста, который следует использовать (если он есть). Например, можно указать, что текстовые поля должны быть заключены в кавычки. (Это свойство применяется только к файлам с разделителями.)

После выбора ограничителя текста невозможно повторно выбрать параметр None. Тип None предназначен для отмены выбора ограничителя текста.

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

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

Текстовый файл SQL, конечно, должен быть в некоторой степени проверен, чтобы не дублировать таблицы и тому подобное.

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

Спасибо за ваш вклад.

4 ответа

У меня была бы таблица VERSION в базе данных, которая определяет, какая версия схемы БД установлена, и когда я отправляю сценарии обновления, которые изменяют БД, я бы попросил их обновить таблицу VERSION. Первая версия, которую вы отправляете, - 1.0, с последующим приращением по мере необходимости.

Вся логика создания / обнаружения / управления версиями объекта SQL будет в SQL. Это, безусловно, самый простой способ сделать это на клиенте, это самый простой способ разработать и протестировать перед отправкой (MS SQL Management Studio - находка), это самый простой способ сравнить с предыдущей версией, сохранить в системе управления версиями, и т.п.

Если вы спрашиваете How do I read a text file and make the results execute in SQL

Я бы использовал StreamReader для чтения текстового файла в переменную string .

После того, как вы его прочитали, откройте соединение с базой данных и выполните ExecuteNonQuery со значением переменной string .

Я бы написал в комментариях, но не могу. Я думаю, это может быть то, что вы ищете.

SSMS поставляется с установкой сервера и доступен для версий SQL Express. (Это не требуется на клиентских компьютерах, но может быть полезно для отладки.

Скорее всего, это будет среда с низким уровнем безопасности, и каждый пользователь будет иметь полный контроль над БД.

Там довольно просто прочитать текстовый файл и запустить его в БД. Просто установите соединение и отправьте скрипт:

Возможно, вы захотите использовать виртуальную машину на своем ПК для разработки, так как это позволит вам быстро провести тестирование ваших скриптов и кода и вернуться в базовое состояние.

Читайте также: