如果和Null sql语句

时间:2011-07-07 07:25:21

标签: c# asp.net sql

更新:此声明是否正确

  public void CheckReputationIfNull()
{
    StringBuilder sb = new StringBuilder();
    sb.Append("DECLARE @isReputationNull int");
    sb.Append(" SET @isReputationNull=( SELECT Reputation");
    sb.Append(" FROM Users u");
    sb.Append(" INNER JOIN Comments c ON c.UsersID = u.UsersID");
    sb.Append(" WHERE c.CommentsID = @CommentsID)");

sb.Append(" BEGIN IF ( @isReputationNull IS NULL)");
sb.Append("UPDATE u ");
sb.Append(" SET Reputation = 0");
sb.Append(" FROM Users u");
sb.Append(" END");

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

}

5 个答案:

答案 0 :(得分:4)

ISNULL是一个函数,所以你可以这样做:

ISNULL(MyColumn, 'alternative value')

您想要做的是:

IF (MyColumn IS NULL)

检查列是否为NULL。

答案 1 :(得分:2)

更简单,单一陈述,不易出错:

UPDATE Users SET Reputation = COALESCE(Reputation,0) WHERE UserID = @UserID

或者,更新您的表定义,以便声誉首先不可为空(并且可选,因此默认为0)


或者,将它与你的other question结合起来(我仍然不确定你是否应该更新/修改那个),你可以:

UPDATE Users SET Reputation = COALESCE(Reputation,0) + @NewReputation
   WHERE UserID = (select UserID from Comments where CommentID = @CommentID)

答案 2 :(得分:0)

IF (@isReputationNull IS NULL)
BEGIN
...
END

IS和NULL之间需要一个空格。 BEGIN也在IF声明之后

答案 3 :(得分:0)

使用此:

 sb.Append(" IF @isReputationNull IS NULL BEGIN");

ISNULL - 是select子句中的一个函数,您不需要它。您还应该在BEGIN语句后移动IF关键字。

答案 4 :(得分:-1)

首先,您需要在IF之后的下一行移动BEGIN。 SQL中IF的语法是:

DECLARE @test INT
SET @test = 1

IF (@test = 1) 
BEGIN
    PRINT 'test is equal to one'
END

其次,您没有在update语句中提供WHERE条件。如果您按原样执行语句,它将更新表中所有用户的信誉,可能导致您丢失数据。如果您只想初始化发布评论的特定用户的信誉,则需要包含WHERE UserID = @UserID(您可以在第一个查询中填充此变量)。

此外,如果您大量使用参数化查询,我建议您首先直接在SQL编辑器中创建查询(例如带有数据连接的Visual Studio或SQL Server Management Studio)。这将帮助您在将语句添加到代码之前识别并修复任何语法错误,因为一旦将它们转换为代码中的字符串,它们就变得更难调试。