Postgres Postgres

时间:2017-05-30 21:42:03

标签: postgresql node-postgres

我尝试通过REST API修补对象。我的查询有问题......

// query 
var query = "UPDATE users SET \
            first_name = CASE WHEN $3 != '' THEN first_name = $3 ELSE first_name = first_name END, \
last_name = CASE WHEN $4 != '' THEN last_name = $4 ELSE last_name = last_name END, \
date_updated = now()\
WHERE username = $1"

// params
var params = [
    request.params.user_id,
    request.body.first_name || '',
    request.body.last_name || ''
];

// query runs 
sharedPgClient.query(query,params,function(err, res){
    callback(err, res);
});

我得到的是成功,但每一栏都设置为" false"除了我没有设置的用户名。我没有将anythign设置为tru / false。我尝试过不同的价值观,但我迷失了。请帮忙

2 个答案:

答案 0 :(得分:1)

您正在做的是在一个案例中使用first_name = $3表达式的结果,在另一个案例中使用first_name = first_name。两者都是布尔值。

你想写的可能是:

... SET first_name = CASE WHEN $3 <> '' THEN $3 ELSE first_name END ...

同样为last_name

答案 1 :(得分:1)

@(Html.Kendo().Grid<FModel>() .Name("FStuff") .Columns(c => { c.Bound(m => m.Date); c.Bound(m => m.Location); c.Bound(m => m.Name); c.Bound(m => m.PurchaseOrderID); c.Bound(m => m.Start); // time column c.Bound(m => m.End); // time column }) .Pageable(p => p .Enabled(true) .PageSizes(new List<int> { 10, 25, 999 }) .Refresh(true)) ... other options ... when子句采用值,而不是SQL片段。 else,例如,是一个布尔表达式,可以评估为first_name = $3true,具体取决于false的值。相反,您只需要使用您尝试设置的值:

first_name