Я создаю хранимую процедуру в SQL Server 2016, где в основном я собираюсь проверить комбинацию пользователя и пароля, чтобы узнать, является ли пользователь действительным, если да, то я хочу установить два параметра OUTPUT, один из которых содержит логическое значение, котороеозначает, что пользователь действителен (потому что позже в моем приложении я хочу проверить это значение bool), а другой, содержащий идентификатор пользователя.
Мой SPROC выглядит следующим образом
ALTER PROCEDURE [dbo].[uspLogin]
(
@Email AS VARCHAR(200),
@Password AS VARCHAR(200),
@IsValid AS BIT OUTPUT,
@UserId AS INT OUTPUT
)
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRY
BEGIN TRANSACTION;
SELECT
@IsValid = (CASE WHEN COUNT(*) > 0 THEN CAST(1 AS BIT) ELSE CAST(0 AS BIT) END),
@UserId = (CASE WHEN COUNT(*) > 0 THEN CAST(U.UserId AS INT) ELSE CAST(-1 AS INT) END)
FROM [dbo].[User] AS U
INNER JOIN [dbo].[UserEnabled] AS UE ON U.UserId = UE.UserId
WHERE U.Email = @Email AND U.Password = @Password
COMMIT TRANSACTION;
END TRY
BEGIN CATCH
IF @@TRANCOUNT > 0
ROLLBACK TRANSACTION;
DECLARE @ErrorMessage nvarchar(4000) = 'Error: [' + ERROR_MESSAGE() + '] in line [' + CAST(ERROR_LINE() AS varchar(1000)) + '] of procedure [' + ERROR_PROCEDURE() + ']';
RAISERROR(@Errormessage, 18, 0);
END CATCH;
END
После выполнения я получаю эту ошибку:
Столбец 'dbo.User.UserId' недопустим в списке выбора, поскольку он не содержится ни в статистической функции, ни в предложении GROUP BY.