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();
}
}
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(。这将帮助您在将语句添加到代码中之前识别并修复任何语法错误,因为一旦将它们转换为代码中的字符串,它们将变得更难调试。