В этом руководстве вы узнаете, как вызвать хранимую процедуру с параметром OUTPUT в SQL Server из приложения Node.js.
Это руководство начинается с того места, где закончилось руководство «Вызов хранимой процедуры в Node.js».
Мы создадим новую хранимую процедуру в базе данных BookStore и вызовем ее из приложения Node.js.
Создание новой хранимой процедуры
Шаг 1. Откройте SQL Server Management Studio(SSMS) и подключитесь к своему SQL Server.
Шаг 2. Создайте новую хранимую процедуру GetAuthorsByBirthYear, которая возвращает авторов, чьи годы рождения находятся в пределах начального и конечного годов. Хранимая процедура имеет выходной параметр, который хранит количество найденных авторов.
CREATE PROCEDURE GetAuthorsByBirthYear(
@StartYear SMALLINT,
@EndYear SMALLINT,
@AuthorCount INT OUTPUT
) AS
BEGIN
SELECT
AuthorID, FirstName, LastName, BirthDate
FROM
Authors
WHERE
YEAR(BirthDate) BETWEEN @StartYear AND @EndYear
ORDER BY
BirthDate DESC;
SELECT @AuthorCount = @@ROWCOUNT;
END;
Шаг 3. Протестируйте хранимую процедуру, выполнив следующие операторы:
DECLARE @count INT; EXEC GetAuthorsByBirthYear @StartYear = 1775, @EndYear = 1812, @AuthorCount = @count OUTPUT; SELECT @count;
Выход:
AuthorID | FirstName | LastName | BirthDate ---------+-----------+----------+------------ 3 | Jane | Austen | 1775-12-16 20 | Mary | Shelley | 1797-08-30 9 | Charles | Dickens | 1812-02-07 (3 rows)
(No column name) ---------------- 3
Вызов хранимой процедуры из Node.js
Шаг 1. Измените файл procedure.js в каталоге проекта.
Шаг 2. Определите функцию findAuthorsByBirthYears в файле procedure.js, которая вызывает хранимую процедуру GetAuthorsByBirthYear:
// ...
const findAuthorsByBirthYears = async(startYear, endYear) => {
try {
// Connect to the database
const pool = await sql.connect(config);
// Call the stored procedure GetAuthorsByBirthYear
const result = await pool
.request()
.input('StartYear', sql.SmallInt, startYear)
.input('EndYear', sql.SmallInt, endYear)
.output('AuthorCount', sql.Int)
.execute('GetAuthorsByBirthYear');
// Return the result
return result;
} catch(err) {
console.error(err);
}
};
export { findAuthorsByBirthDates, findAuthorsByBirthYears };
Как это работает.
Сначала импортируйте объект 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('StartYear', sql.SmallInt, startYear)
.input('EndYear', sql.SmallInt, endYear)
.output('AuthorCount', sql.Int)
.execute('GetAuthorsByBirthYear');
В этом заявлении:
- pool.request() создает новый экземпляр запроса, представляющий один запрос, который вы хотите выполнить к базе данных.
- input() определяет входные параметры оператора, включая StartYear и EndYear.
- output() определяет выходной параметр хранимой процедуры, которым является AuthorCount.
- .execute('GetAuthorsByBirthYear') вызывает хранимую процедуру GetAuthorsByBirthYear с входными/выходными параметрами.
Шаг 3. Измените файл index.js, чтобы вызвать функцию findAuthorsByBirthYears:
import { findAuthorsByBirthYears } from './procedure.js';
const result = await findAuthorsByBirthYears(1775, 1812);
console.log(result.output);
Как это работает.
Сначала импортируйте функцию findAuthorsByBirthYears из модуля procedure.js:
import { findAuthorsByBirthYears } from './procedure.js';
Во-вторых, вызовите функцию findAuthorsByBirthYears, чтобы найти авторов, чей год рождения находится в диапазоне между 1775 и 1812:
const result = await findAuthorsByBirthYears(1775, 1812);
В-третьих, отобразите выходной параметр AuthorCount:
console.log(result.output);
Шаг 4. Откройте терминал и выполните следующую команду для выполнения файла index.js:
npm start
Если вы видите следующий вывод, это означает, что программа успешно вызвала хранимую процедуру:
{ AuthorCount: 3 }
Загрузите исходный код проекта
Загрузите исходный код проекта
Краткое содержание
- Используйте метод output() объекта Request, чтобы получить значение параметра OUTPUT хранимой процедуры.

