Добрый день, у меня возникла проблема.
Из свого ASP.NET приложения я вызываю хранимую процедуру для обновления статуса сообщения следующим образом.
UpdateMessageStatus("Closed");
Где внутри UpdateMessageStatus выполняется
SqlCommand cmd = new SqlCommand("spMessageStatusUpdate", sqlConn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@MessageID", MessageID);
((SqlParameter)cmd.Parameters.Add("@Status", SqlDbType.VarChar, 20)).Value = status;
cmd.ExecuteNonQuery();
После выполнения этого запроса по SQL Profiler видно, что на сервер пошел запрос
exec spMessageStatusUpdate @MessageID = 3, @Status = 'Closed'
НО при этом статус сообщения не обновился.
Если же этот самый запрос скопировать в Query Analyzer, то статус обновляется.
Собственно сама процедура
ALTER PROCEDURE dbo.spMessageStatusUpdate
@MessageID int,
@Status varchar (20)
AS
BEGIN
DECLARE @StatusID int
SELECT @StatusID = S.StatusID From Status S
WHERE S.[Name]= @Status
UPDATE Message SET StatusID = @StatusID
WHERE
Message.MessageID = @MessageID
END
Опытным путем было выявлено, что не происходит выборка
SELECT @StatusID = S.StatusID From Status S
WHERE S.[Name]= @Status
Объясните, с чем это может быть связано? Пробовал различные варианты сравнения (LIKE, через RTRIM, добавлял COLLATE, через nvarchar) — нчиего не помогает. Из приложения не выполняется, из Query Analyzer работает.