Параметры OUTPUT
не имеют значения по умолчанию (@OutputParam int NULL OUTPUT
означает, что параметры имеют значение NULL, а не значение по умолчанию NULL
), поэтому (так же, как параметр "input") a значение должно быть передано в SP.
Это означает, что вам нужно написать что-то вроде:
DECALRE @Art int,
@PRV int,
@NXT int;
SET @Art = 4;
EXEC dbo.SlctNxtPrv @Art, @PRV OUTPUT, @NXT OUTPUT;
Если, однако, вы хотите, чтобы параметры OUTPUT
были необязательными, вы нужно будет дать им значение по умолчанию, используя = NULL
. Тогда вам не нужно их поставлять:
ALTER PROCEDURE [dbo].[SlctNxtPrv] @Art int,
@PRV int = NULL OUTPUT,
@NXT int = NULL OUTPUT AS
BEGIN
SELECT @PRV = ISNULL((SELECT TOP 1 id FROM [dbo].[ArtList] WHERE id < @Art ORDER BY id DESC), 0);
SELECT @NXT = ISNULL((SELECT TOP 1 id FROM [dbo].[ArtList] WHERE id > @Art ORDER BY id ASC), 0);
SELECT *
FROM [dbo].[ArtList]
WHERE [id] = @Art;
END;
GO
EXEC dbo.SlctNxtPrv @Art = 4;
DB <> Fiddle