【问题标题】:Checking the value of a field and updating it检查字段的值并更新它
【发布时间】:2011-10-30 01:31:30
【问题描述】:

我对检查数据库中的值有点困惑。我想要做的是查看是否存在如下元组:

job_num   |item_code   |invoice_num
------------------------------------
94834     |EFC-ASSOC-01|

invoice_num 不为空,为空:" "。

我想要的是查找是否存在这样的条目,其中 invoice_num 为“”,并使用输入到文本框中的数字对其进行更新。我对 SQL 中的 if 语句和案例有点困惑,所以如果有人能指出我正确的方向,那就太好了!

【问题讨论】:

    标签: database vb.net sql-server-2005


    【解决方案1】:

    查找此类行(或元组)的一种方法是如下查询:

    SELECT job_num, item_code, invoice_num
    FROM tablename
    WHERE job_num = 94834 AND item_code = "EFC-ASSOC-01" AND invoice_num = ""
    

    如果空字符串有问题,请遵循@Ben 的建议。然后你可以做一个update:

    UPDATE tablename SET invoice_num = ? WHERE job_num = .........
    

    但是,这种方法的问题在于,如果您没有使用主键在更新语句中选择一行,则可能会更新多行(类似地,选择语句可能会返回多行)。因此,您必须查看数据库架构并确定表的主键列,并确保在更新的 WHERE 子句中使用了所有主键列。如果你只是这样做

    UPDATE tablename SET invoice_num = value WHERE invoice_num = ""
    

    具有该 invoice_num 值的所有行都将被更新,这可能不是您想要的。

    【讨论】:

    • 嗯,主键不是问题,因为工作编号和项目代码是键。我认为这个会做到的,我会试一试。
    【解决方案2】:

    如果您只是遇到 SQL 问题并且取决于列的数据类型,this 应该可以帮助您。如果您需要 where 子句中的整个元组,它看起来像:

    SELECT * FROM MyTableName Where job_num = 94834 AND item_code = 'EFC-ASSOC-01' AND datalength(invoice_num) = 0
    

    【讨论】:

      【解决方案3】:

      如果您可以将要更新的值传递给变量(我们称之为@RealInvoiceNum),那么UPDATE 语句应该是这样的:

      UPDATE YourTable
      SET invoice_num = @RealInvoiceNum
      WHERE job_num = @JobNum AND invoice_num = ''
      

      【讨论】:

        猜你喜欢
        • 2017-03-11
        • 1970-01-01
        • 2018-03-31
        • 2015-08-05
        • 1970-01-01
        • 2016-01-10
        • 2020-04-16
        • 2019-09-08
        • 2021-02-26
        相关资源
        最近更新 更多