阻塞要写入SQL数据库表的空字符串

时间:2017-07-12 14:01:59

标签: mysql sql odbc

我有一个程序可以更新数据点更改的生产数据库。但是,程序中的嵌入式脚本会对整行执行全面更新,但我希望它只是部分更新指定列中的值。我没有时间学习脚本并做出我需要的任何更改,所以我尝试将其他列设置为Not Null以试图阻止""从程序中写下的值。

body("capital", hasItem("Oslo"))

但是这种方法不起作用,数据库中的值仍然被""从脚本。有没有办法防止数据库中的列被空值覆盖?

这是全面更新后的数据库表:

enter image description here

更新的目的只是将工作单用作PK并更新相关的完成时间。

我在脚本中找到了更新查询:

ALTER TABLE `scheduling` 
CHANGE COLUMN `Priority` `Priority` VARCHAR(5) NOT NULL ,
CHANGE COLUMN `PurchaseOrder` `PurchaseOrder` VARCHAR(45) NOT NULL ,
CHANGE COLUMN `PartID` `PartID` VARCHAR(45) NOT NULL ,
CHANGE COLUMN `OrderQty` `OrderQty` VARCHAR(20) NOT NULL ,
CHANGE COLUMN `DeliveryDate` `DeliveryDate` VARCHAR(20) NOT NULL ,
CHANGE COLUMN `ReadyToRun` `ReadyToRun` VARCHAR(10) NOT NULL ,
CHANGE COLUMN `LF5` `LF5` VARCHAR(45) NOT NULL ,
CHANGE COLUMN `CompletionTime` `CompletionTime` VARCHAR(45) NOT NULL ;

我将查询部分更改为:

method ODBCConnection.Update (row)
{
    local       query = "";
    local       n, len;
    local       value, retval, cols;

    if (!row.__primary_key || !row..(row.__primary_key))
    {
        error ("Update: Row is not identifiable - primary key not set");
    }
    else
    {
        query = string ("update ", row.__table, " set ");

        len = length(row.__columns);
        n = 0;
        with name in row.__columns do
        {
            if (name != row.__primary_key)
            {
                value = row..name;
                query = string (query,
                                n > 0 ? ", " : "",
                                name, " = ", ODBC_ValueString(value));
                n++;
            }
        }
        query = string (query, " where ", row.__primary_key, " = ",
                        ODBC_ValueString (row..(row.__primary_key)));

//      princ (query, "\n");

        .Statement().FreeStmt (SQL_CLOSE);
        retval = .Query (query);
        if (retval != -1)
            retval = .StoreResult();
        else
            error (.Error());
    }
    retval;
}

这也不起作用。

0 个答案:

没有答案