Sql 如何仅在参数等于特定值时更新列?

Sql 如何仅在参数等于特定值时更新列?,sql,stored-procedures,coldfusion,sybase,Sql,Stored Procedures,Coldfusion,Sybase,我的查询应该只在参数等于1时更新列。下面是一个例子: <cfquery name="updateQry" datasource="test"> UPDATE Table1 SET fname = form.fname, lname = form.lname, <cfif form.status eq 1> title = form.title, </cfif>

我的查询应该只在参数等于1时更新列。下面是一个例子:

<cfquery name="updateQry" datasource="test">
    UPDATE Table1
    SET fname = form.fname,
        lname = form.lname,
        <cfif form.status eq 1>
            title = form.title,
        </cfif>
        last_update_dt = getDate()
    WHERE rec_id = form.record_id
 </cfquery>

更新表1
SET fname=form.fname,
lname=form.lname,
title=form.title,
上次更新\u dt=getDate()
其中rec_id=form.record_id

我想将此SQL查询移动到存储过程。如何仅使用SQL代码实现相同的过程?而不是
title=@title,
如何用SQL代码替换它?我使用Sybase数据库和ColdFusion 2016。上面的代码应该移到存储过程中。

我想您需要一个
大小写
表达式,如下所示:

UPDATE Table1
SET fname = form.fname,
    lname = form.lname,
    title = (case when form.status = 1 then form.title else table1.title end),
    last_update_dt = getDate()
WHERE rec_id = form.record_id;
在存储过程中,可能会使用以下参数:

UPDATE Table1
SET fname = @fname,
    lname = @lname,
    title = (case when @status = 1 then @title else table1.title end),
    last_update_dt = getDate()
WHERE rec_id = #record_id;

我想你需要一个
case
表达式,类似这样:

UPDATE Table1
SET fname = form.fname,
    lname = form.lname,
    title = (case when form.status = 1 then form.title else table1.title end),
    last_update_dt = getDate()
WHERE rec_id = form.record_id;
在存储过程中,可能会使用以下参数:

UPDATE Table1
SET fname = @fname,
    lname = @lname,
    title = (case when @status = 1 then @title else table1.title end),
    last_update_dt = getDate()
WHERE rec_id = #record_id;

在您的示例中,
title
列无论发生什么情况都将每次更新。如果
form.status
等于1,则应更新
title
列。@espresso\u coffee。我们中有一个人遗漏了什么。当
status
不是
1
时,该值被设置回它的值——这是一个不可操作的值。列中没有任何更改。对不起,我错过了那一段。这正是我想要的。谢谢。在您的示例中,
标题
列无论发生什么情况都会每次更新。如果
form.status
等于1,则应更新
title
列。@espresso\u coffee。我们中有一个人遗漏了什么。当
status
不是
1
时,该值被设置回它的值——这是一个不可操作的值。列中没有任何更改。对不起,我错过了那一段。这正是我想要的。非常感谢。