В этом руководстве вы узнаете, как обновлять данные в 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.