Sql 如何仅在参数等于特定值时更新列?
我的查询应该只在参数等于1时更新列。下面是一个例子: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>
<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
时,该值被设置回它的值——这是一个不可操作的值。列中没有任何更改。对不起,我错过了那一段。这正是我想要的。非常感谢。