В этом руководстве вы узнаете, как вызвать хранимую процедуру из базы данных SQL Server из приложения Node.js.
Это руководство начинается с того места, где закончилось руководство «Выполнение транзакции в Node.js».
Мы создадим новую хранимую процедуру в базе данных BookStore и вызовем ее из приложения Node.js.
Создание новой хранимой процедуры
Шаг 1. Откройте SQL Server Management Studio(SSMS) и подключитесь к своему SQL Server.
Шаг 2. Создайте новую хранимую процедуру GetAuthorsByBirthDate, которая возвращает авторов, даты рождения которых находятся в пределах начальной и конечной даты:
CREATE PROCEDURE GetAuthorsByBirthDate @StartDate DATE, @EndDate DATE AS BEGIN SET NOCOUNT ON; SELECT AuthorID, FirstName, LastName, BirthDate FROM Authors WHERE BirthDate BETWEEN @StartDate AND @EndDate ORDER BY BirthDate; END; GO
Шаг 3. Протестируйте хранимую процедуру, выполнив следующий оператор:
EXEC GetAuthorsByBirthDate '1775-01-01', '1800-01-01';
Выход:
AuthorID | FirstName | LastName | BirthDate ---------+-----------+----------+------------- 3 | Jane | Austen | 1775-12-16 20 | Mary | Shelley | 1797-08-30 (2 rows)
Вызов хранимой процедуры из Node.js
Шаг 1. Создайте новый файл procedure.js в каталоге проекта.
Шаг 2. Определите функцию findAuthorsByBirthDates в файле procedure.js, которая вызывает хранимую процедуру GetAuthorsByBirthDate:
import sql from 'mssql'; import { config } from './config.js'; const findAuthorsByBirthDates = async(startDate, endDate) => { try { // Connect to the database const pool = await sql.connect(config); // Call the stored procedure GetAuthorsByBirthDate const result = await pool .request() .input('StartDate', sql.Date, new Date(startDate)) .input('EndDate', sql.Date, new Date(endDate)) .execute('GetAuthorsByBirthDate'); // Return the result return result.recordset; } catch(err) { console.error(err); } }; export { findAuthorsByBirthDates };
Как это работает.
Сначала импортируйте объект SQL из пакета mssql и объект конфигурации из модуля config.js:
import sql from 'mssql'; import { config } from './config.js';
Пакет mssql предоставляет API для взаимодействия с SQL Server. Конфигурация — это объект, содержащий параметры базы данных для подключения.
Во-вторых, подключитесь к базе данных, используя предоставленный объект конфигурации:
const pool = await sql.connect(config);
Функция sql.connect() возвращает объект ConnectionPool, который позволяет выполнять запросы.
В-третьих, вызовите хранимую процедуру с помощью метода execute() объекта ConnectionPool:
const result = await pool .request() .input('StartDate', sql.Date, new Date(startDate)) .input('EndDate', sql.Date, new Date(endDate)) .execute('GetAuthorsByBirthDate');
В этом заявлении:
- pool.request() создает новый экземпляр запроса, представляющий один запрос, который вы хотите выполнить к базе данных.
- input() определяет параметры запроса, включая StartDate и EndDate.
- .execute('GetAuthorsByBirthDate') вызывает хранимую процедуру GetAuthorsByBirthDate с входными параметрами.
Шаг 3. Измените файл index.js, чтобы вызвать функцию findAuthorsByBirthDates:
import { findAuthorsByBirthDates } from './procedure.js'; const authors = await findAuthorsByBirthDates('1775-01-01', '1800-01-01'); for(const { FirstName, LastName, BirthDate } of authors) { console.log(`${FirstName} ${LastName} - ${BirthDate.toLocaleDateString()}`); }
Как это работает.
Сначала импортируйте функцию findAuthorsByBirthDates из модуля procedure.js:
import { findAuthorsByBirthDates } from './procedure.js';
Во-вторых, вызовите функцию findAuthorsByBirthDates, чтобы найти авторов, даты рождения которых находятся в диапазоне от 1775-01-01 до 1800-01-01:
const authors = await findAuthorsByBirthDates('1775-01-01', '1800-01-01');
В-третьих, отобразите информацию об авторе, включая FirstName, LastName и BirthDate, используя оператор for…of.
for(const { FirstName, LastName, BirthDate } of authors) { console.log(`${FirstName} ${LastName} - ${BirthDate.toLocaleDateString()}`); }
Обратите внимание, что мы используем деструктуризацию объектов в операторе for…of, чтобы сделать код более лаконичным.
Шаг 4. Откройте терминал и выполните следующую команду для выполнения файла index.js:
npm start
Если вы видите следующий вывод, это означает, что программа успешно вызвала хранимую процедуру:
Jane Austen - 12/16/1775 Mary Shelley - 8/30/1797
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Используйте метод execute() оператора ConnectionPool для вызова хранимой процедуры в SQL Server из Node.js.