繁体   English   中英

检查表中列的数字是否大于0

[英]check if a number from a column in a table is greater than 0

抱歉,这个问题是重复的,但是我没有找到答案。 我想检查表中的列的值是否大于0,如果不执行任何操作。 问题是我不知道如何从表中获取值并进行检查。

我的点子:

if(column table(Quantity) where ID=@ID >0)
   {
      Do something
   }

我正在使用asp.net,C#和SQL。 这是我的一些代码://此代码是将具有当前ID的项目添加到表中时,该项目的数量减少1。

SqlCommand command = new SqlCommand("UPDATE Items SET Quantity=Quantity-1;
command.ExecuteNonQuery();

在“项目”表中,我具有“项目数量”,因此可以说该特定项目的数量为5,并且每次添加到gridview的数量都减少1,我不希望它低于0。(现在使用此代码它低于0)我有我在上面告诉过的想法,但我不知道该怎么做。

有人知道怎么做吗?

只需在查询中使用WHERE。 从头到尾给我您的详细故事。 另外,如果您想在查询执行过程中发生错误时提醒错误,则可以通过将ExecuteNonQuery结果存储到变量中来进行。 这是供您参考

http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executenonquery%28v=vs.110%29.aspx

让我在这里强调一些要点:

For UPDATE, INSERT, and DELETE statements, the return value is the number of rows affected by the command.

For all other types of statements, the return value is -1. If a rollback occurs, the return value is also -1.

从这里,您甚至可以为查询返回错误结果添加一些逻辑处理。

只需在UPDATE命令中使用WHERE子句即可:

SqlCommand command = new SqlCommand(
                     "UPDATE Items SET Quantity=Quantity-1 WHERE ID=@Id AND Quantity>0");
command.Parameters.AddWithValue("@Id", id);
int numberOfRecords = command.ExecuteNonQuery();
if (numberOfRecords==0)
    throw new Exception("Error setting quantity.");

您可以通过检查受影响的记录数来验证是否已设置数量,如果可以,则应为1。

若要在更新后获取“ Quantity列的值,请在您的SQL语句中使用OUTPUT子句,例如:

UPDATE <YOUR_TABLE> SET Quantity = Quantity - 1
OUTPUT INSERTED.Quantity
WHERE ID = <YOUR_ID>

将“ Quantity返回为0后,您可以执行软件中所需的任何操作,例如,如果用户尝试进一步减小它,则显示提示。

有关MSDN的更多信息,请访问: http : //msdn.microsoft.com/zh-cn/library/ms177564.aspx

如果您不使用SQL Server 2005或更高版本(这是OUTPUT所必需的),则仍然可以编写一个简单的存储过程来执行相同的操作,例如

CREATE PROCEDURE DecreaseQuantity
    @id int
AS
BEGIN

    UPDATE <YOUR_TABLE>
    SET Quantity = Quantity - 1
    WHERE ID = @id

    SELECT Quantity
    FROM <YOUR_TABLE>
    WHERE ID = @id

END

我不建议您在应用程序代码中进行这种检查。

为了确保SQL中列的值范围,存在检查约束的构造。 例如,如果要确保列中永远不会出现负值(或零),则可以添加以下约束

ALTER TABLE Items
ADD CONSTRAINT CK_Items_Quantity_Range CHECK (
   Quantity > 0
)

然后,如果您执行UPDATE/INSERT您将收到一个异常,您可以在应用程序代码中对此做出反应。

或者,如果希望在列达到某个值时执行一些sql-action,也可以使用触发器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM