В этом руководстве вы узнаете, как выполнить команду BULK INSERT в SQL Server из приложения Node.js.
Это руководство начинается с того места, где закончилось руководство по импорту данных из CSV-файла в SQL Server из Node.js.
Мы выполним массовую вставку данных клиентов из CSV-файла в таблицу Customers базы данных BookStore:
- Используйте пакет csv-parse для чтения данных о клиентах из файла ./data/customers.csv.
- Используйте пакет mssql для выполнения запроса на массовую вставку.
Массовая вставка данных клиентов
Шаг 1. Создайте новый файл bulk.js в каталоге проекта.
Шаг 2. Скопируйте CSV-файл(customers), содержащий данные о клиентах, в каталог данных:
FirstName,LastName,Email,PhoneNumber,Address John,Doe, [email protected],123-456-7890,"123 Elm Street, Springfield, IL" Jane,Smith, [email protected],234-567-8901,"456 Oak Avenue, Metropolis, NY" Alice,Johnson, [email protected],345-678-9012,"789 Pine Road, Gotham, NJ"
Шаг 3. Определите функцию, которая считывает данные о клиентах из CSV-файла, используя пакет csv-parse:
const readCustomerCSV = async(filename) => {
const customers = [];
return new Promise((resolve, reject) => {
createReadStream(filename)
.pipe(parse({ columns: true, trim: true }))
.on('data',(data) => customers.push(data))
.on('end',() => resolve(customers))
.on('error',(error) => reject(error));
});
};
Функция readCustomerCSV возвращает массив объектов клиентов, где каждый объект содержит свойства FirstName, LastName, Email, PhoneNumber и Address.
Шаг 4. Определите функцию insertCustomers, которая выполняет массовую вставку данных о клиентах из файла customers.csv в таблицу Customers:
const insertCustomers = async(filename) => {
try {
// read customer data from a CSV file
const customers = await readCustomerCSV(filename);
// Connect to the SQL Server
await sql.connect(config);
// Initialize a Table object
const table = new sql.Table('Customers');
// Set to false because the table already exists.
// If the table does not exist, set to true , it will create the table
table.create = false;
table.columns.add('FirstName', sql.VarChar(100), { nullable: false });
table.columns.add('LastName', sql.VarChar(100), { nullable: false });
table.columns.add('Email', sql.VarChar(255), { nullable: false });
table.columns.add('PhoneNumber', sql.VarChar(20), { nullable: false });
table.columns.add('Address', sql.VarChar(255), { nullable: false });
// Add rows to the table
customers.forEach((c) => {
table.rows.add(
c.FirstName,
c.LastName,
c.Email,
c.PhoneNumber,
c.Address
);
});
// Create a new bulk request to the Customers table
const request = new sql.Request();
// Execute the bulk insert
request.bulk(table);
} catch(err) {
console.error(err);
}
};
Как это работает.
Сначала считайте данные из CSV-файла, вызвав функцию readCustomerCSV:
const customers = await readCustomerCSV(filename);
Во-вторых, подключитесь к SQL Server:
await sql.connect(config);
В-третьих, инициализируйте объект Table с именем таблицы Customers:
const table = new sql.Table('Customers');
Поскольку таблица Customers уже существует, установите свойство create в значение false:
table.create = false;
Обратите внимание: если таблица не существует и вы устанавливаете свойство create в значение true, таблица Customers будет автоматически создана в SQL Server.
В-четвертых, определите столбцы для таблицы «Клиенты».
table.columns.add('FirstName', sql.VarChar(100), { nullable: false });
table.columns.add('LastName', sql.VarChar(100), { nullable: false });
table.columns.add('Email', sql.VarChar(255), { nullable: false });
table.columns.add('PhoneNumber', sql.VarChar(20), { nullable: false });
table.columns.add('Address', sql.VarChar(255), { nullable: false });
Обратите внимание, что этот шаг необходим, даже если таблица Customers уже существует. Кроме того, если таблица Customers не существует, вам также необходимо определить столбец первичного ключа(CustomerID).
В-пятых, добавьте строки в таблицу «Клиенты»:
customers.forEach((c) => {
table.rows.add(c.FirstName, c.LastName, c.Email, c.PhoneNumber, c.Address);
});
В-шестых, создайте массовый запрос к таблице Customers:
const request = new sql.Request(); request.bulk(table);
Наконец, отобразите ошибку, если она возникла в блоке catch:
console.error(err);
Вот полный файл bulk.js:
import { createReadStream } from 'fs';
import { parse } from 'csv-parse';
import sql from 'mssql';
import { config } from './config.js';
const readCustomerCSV = async(filename) => {
const customers = [];
return new Promise((resolve, reject) => {
createReadStream(filename)
.pipe(parse({ columns: true, trim: true }))
.on('data',(data) => customers.push(data))
.on('end',() => resolve(customers))
.on('error',(error) => reject(error));
});
};
const insertCustomers = async(filename) => {
try {
// read customer data from a CSV file
const customers = await readCustomerCSV(filename);
// Connect to the SQL Server
await sql.connect(config);
// Initialize a Table object
const table = new sql.Table('Customers');
// Set to false because the table already exists.
// If the table does not exist, set to true , it will create the table
table.create = false;
table.columns.add('FirstName', sql.VarChar(100), { nullable: false });
table.columns.add('LastName', sql.VarChar(100), { nullable: false });
table.columns.add('Email', sql.VarChar(255), { nullable: false });
table.columns.add('PhoneNumber', sql.VarChar(20), { nullable: false });
table.columns.add('Address', sql.VarChar(255), { nullable: false });
// Add rows to the table
// Add rows to the table
customers.forEach((c) => {
table.rows.add(
c.FirstName,
c.LastName,
c.Email,
c.PhoneNumber,
c.Address
);
});
// Create a new bulk request to the Customers table
const request = new sql.Request();
// Execute the bulk insert
request.bulk(table);
} catch(err) {
console.error(err);
}
};
export { insertCustomers };
Шаг 5. Измените файл index.js для чтения данных из файла ./data/customer.csv и массовой вставки их в таблицу Customers:
import { insertCustomers } from './bulk.js';
insertCustomers('./data/customers.csv');
Шаг 6. Выполните следующую команду для запуска файла bulk.js:
npm start
Проверка массовой вставки
Шаг 1. Запустите SQL Server Management Studio и подключитесь к SQL Server.
Шаг 2. Выполните следующую команду для извлечения данных из таблицы Customers:
SELECT * FROM customers;
Выход:

Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Создайте объект Table и вызовите метод bulk() для выполнения запроса на массовую вставку в SQL Server.
