If and Null sql statements

本文关键字:statements sql Null and If | 更新日期: 2023-09-27 18:01:30

UPDATE:这句话正确吗

  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();
}

}

If and Null sql statements

ISNULL是一个函数,因此您可以执行:

ISNULL(MyColumn, 'alternative value')

你想做的是:

IF (MyColumn IS NULL)

它检查列是否为NULL。

更简单、单一的语句,不易出错:

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

或者,更新您的表定义,使Reputation在一开始就不可为null(可选,使其默认为0(


或者,把它和你的另一个问题结合起来(我仍然不确定你不应该刚刚更新/修改这个问题(,你可以:

UPDATE Users SET Reputation = COALESCE(Reputation,0) + @NewReputation
   WHERE UserID = (select UserID from Comments where CommentID = @CommentID)
IF (@isReputationNull IS NULL)
BEGIN
...
END

IS和NULL之间需要一个空格。BEGIN也在IF语句

之后

使用此:

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

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

首先,您需要将BEGIN移到IF后面的下一行。SQL中IF的语法为:

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

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

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