Node.js SQL Server: вызов хранимых процедур

В этом руководстве вы узнаете, как вызвать хранимую процедуру из базы данных 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.
Мирослав С.

Автор статей, ИБ-специалист