我有一个程序可以更新数据点更改的生产数据库。但是,程序中的嵌入式脚本会对整行执行全面更新,但我希望它只是部分更新指定列中的值。我没有时间学习脚本并做出我需要的任何更改,所以我尝试将其他列设置为Not Null以试图阻止""从程序中写下的值。
body("capital", hasItem("Oslo"))
但是这种方法不起作用,数据库中的值仍然被""从脚本。有没有办法防止数据库中的列被空值覆盖?
这是全面更新后的数据库表:
更新的目的只是将工作单用作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;
}
这也不起作用。