Оператор обновления SQL для добавления значения - PullRequest
1 голос
/ 07 июля 2011
   public void InsertUserReputation()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("UPDATE u ");
    sb.Append(" SET u.Reputation = (u.Reputation + @Reputation)");//Problem is here u.Reputation is "Null" not 0... I think i need some if statement to check if it is a null and then update it to 0 and then add..what do you think?
    sb.Append(" FROM Users u");
    sb.Append(" INNER JOIN Comments c ON c.UsersID = u.UsersID");
    sb.Append(" WHERE c.CommentsID = @CommentsID");

    using (SqlConnection conn = new SqlConnection(AllQuestionsPresented.connectionString))
    {
        SqlCommand cmd = new SqlCommand(sb.ToString(), conn);
        cmd.Parameters.Add("@Reputation", SqlDbType.Int).Value = 5;
        cmd.Parameters.Add("@CommentsID", SqlDbType.Int).Value = commentID;  
        conn.Open();
        cmd.ExecuteNonQuery();
    }
}

Я хочу добавить репутации пользователю 5 баллов за комментарий, который он оставляет в теме ... но не удается обновить почему? / ... commentID получает значение, и поэтому параметр репутации

Ответы [ 3 ]

3 голосов
/ 07 июля 2011

Изменение

SET u.Reputation = (u.Reputation + @Reputation)

в

SET u.Reputation = COALESCE(u.Reputation,0) + @Reputation

поэтому NULL с в поле Reputation перед добавлением @Reputation.

заменяются на 0.

Кроме того, вы можете сохранить свой код, если сначала установите для всех значений NULL значение 0, а затем заполните поле NOT NULL с помощью оператора ALTER TABLE . Выполните следующее, один раз:

UPDATE Users
SET Reputation = 0
WHERE Reputation IS NULL ;

ALTER TABLE Users 
ALTER COLUMN Reputation NOT NULL DEFAULT 0 ;
1 голос
/ 07 июля 2011
sb.Append(" SET Reputation = (u.Reputation + @Reputation)");

edit: я пропустил ваше оригинальное замечание о том, что u.Reputation может быть NullПопробуйте следующее:

sb.Append(" SET Reputation = (isnull(u.Reputation,0) + @Reputation)");
0 голосов
/ 07 сентября 2013

Вы также можете изменить

SET u.Reputation = (u.Reputation + @Reputation)

до

SET u.Reputation = COALESCE(u.Reputation + @Reputation, @Reputation, 0)

но все существующие ответы хорошо отвечают вашим потребностям

Единственное преимущество, предлагаемое выше, состоит в том, что, если @Reputation также равно NULL, оно все еще работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...