В этом руководстве вы узнаете, как обновлять данные в SQL Server из приложений Node.js.
Это руководство начинается с того места, где закончилось руководство по выполнению массовой вставки из Node.js.
Мы покажем вам, как обновить имя автора в таблице «Авторы».
Обновление данных в таблице
Шаг 1. Создайте новый файл с именем update.js в каталоге проекта.
Шаг 2. Определите новую функцию updateAuthor в файле update.js для обновления имени автора:
import sql from 'mssql';
import { config } from './config.js';
export const updateAuthor = async(id, firstName) => {
try {
// Connect to the database
await sql.connect(config);
// Update the First Name
const result =
await sql.query`UPDATE Authors SET FirstName =${firstName} WHERE AuthorID=${id}`;
console.dir(result);
} catch(err) {
console.error(err);
}
};
Как это работает.
Сначала импортируйте объект sql из модуля mssql и объект config из модуля config.js соответственно:
import sql from 'mssql';
import { config } from './config.js';
Обратите внимание, что объект конфигурации содержит все параметры базы данных, включая сервер, имя базы данных, имя пользователя и пароль.
Во-вторых, определите функцию updateAuthor, которая обновляет имя автора, указанного идентификатором:
export const updateAuthor = async(id, firstName) => {
В-третьих, подключитесь к SQL Server, используя метод connect() объекта SQL:
await sql.connect(config);
В-четвертых, выполните оператор UPDATE, чтобы изменить имя автора, указанное в идентификаторе автора, на новое:
const result =
await sql.query`UPDATE Authors SET FirstName =${firstName} WHERE AuthorID=${id}`;
В-пятых, отобразите результат, если запрос выполнен успешно:
console.dir(result);
Объект результата содержит количество обновленных строк. Чтобы получить к нему доступ, используйте свойство rowsAffected:
result.rowsAffected
Это массив чисел, указывающий строку, затронутую операторами. Чтобы получить доступ к строкам, затронутым первым оператором, вы можете получить доступ к первому элементу массива result.rowsAffected:
if(result.rowsAffected.length >= 1) {
console.log(`Row(s) affected: ${result.rowsAffected[0]}`);
}
Шаг 3. Импортируйте updateAuthor из модуля update.js и вызовите его, чтобы обновить имя автора с идентификатором 14 на «Джоан Кэтлин»:
import { updateAuthor } from './update.js';
await updateAuthor(14, 'Joanne Kathleen');
Шаг 4. Откройте терминал и выполните следующую команду для запуска файла index.js:
npm start
Если вы видите следующий вывод, вы успешно обновили строку:
{
recordsets: [],
recordset: undefined,
output: {},
rowsAffected: [ 1 ]
}
Выходные данные показывают, что rowsAffected содержит число 1, что означает, что одна строка была успешно обновлена.
Вот подробная информация о свойствах объекта результата:
- recordsets содержит массив наборов записей.
- Recordset хранит первый набор записей из массива наборов записей.
- rowsAffected — это массив чисел, представляющих несколько затронутых строк каждым оператором.
- выход — это коллекция значений выходных параметров по типу «ключ/значение».
Обновление данных с использованием параметров
Ниже переопределяется updateAuthor, который использует параметры для обновления имени автора, указанного идентификатором:
import sql from 'mssql';
import { config } from './config.js';
export const updateAuthor = async(id, firstName) => {
try {
// Connect to the database
const pool = await sql.connect(config);
// Update the First Name
const result = await pool
.request()
.input('id', sql.Int, id)
.input('firstName', sql.VarChar, firstName)
.query(`UPDATE Authors SET FirstName =@firstName WHERE AuthorID=@id`);
if(result.rowsAffected.length >= 1) {
console.log(`${result.rowsAffected.length} row(s) updated!`);
}
} catch(err) {
console.error(err);
}
};
Как это работает.
Сначала откройте соединение с SQL Server:
const pool = await sql.connect(config);
Метод connect() возвращает объект ConnectionPool.
Во-вторых, выполните оператор UPDATE, выполнив метод запроса и привязав параметры с помощью метода input():
const result = await pool
.request()
.input('id', sql.Int, id)
.input('firstName', sql.VarChar, firstName)
.query(`UPDATE Authors SET FirstName =@firstName WHERE AuthorID=@id`);
В этом операторе @firstName и @id являются держателями параметров. Они будут заменены значениями параметров id и firstName, предоставленными методам input() соответственно.
Метод query() возвращает объект результата, содержащий ту же информацию, что и литералы шаблона, помеченные тегом sql.query.
В-третьих, отобразите количество обновленных строк:
if(result.rowsAffected.length >= 1) {
console.log(`${result.rowsAffected.length} row(s) updated!`);
}
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Используйте литералы шаблона тега sql.query или метод query() для выполнения оператора UPDATE с целью обновления строки в таблице из Node.js.

