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