Во-первых, вы хотите, чтобы это было разделено на две хранимые процедуры. Если вы когда-либо используете бит для определения того, какой фрагмент кода выполнять, вы, вероятно, пытаетесь поместить слишком много в одну хранимую процедуру.
CREATE PROCEDURE dbo.GetMessageCount (
@username nchar(12),
@message_count int OUTPUT,
@unread_message_count int OUTPUT
) AS
SELECT
@message_count = SUM(CASE WHEN message_read = 1 THEN 1 ELSE 0 END),
@unread_message_count = SUM(CASE WHEN message_read <> 1 THEN 1 ELSE 0 END)
FROM messages
WHERE usernameTo = @username
GO
Вы можете сделать что-то подобное для хранимой процедуры, которая будет получать все сообщения для определенного пользователя. Вы не хотите использовать «Выбрать *» здесь. Вы должны всегда перечислять конкретные столбцы, которые вам нужны. Я перечислил несколько примеров столбцов.
CREATE PROCEDURE dbo.GetMessagesByUser (
@username nchar(12)
) AS
SELECT
MessageID,
MessageSubject,
MessageContent,
MessageFromUser,
MessageCreatedDate
FROM messages
WHERE usernameTo = @username
GO