如何在Sybase中使用子查询中的计算列更新表



我有一个要更新的表,其中包含一个名为"expiration_days"的列。我正在做的是尝试使用"别名列"(不确定该怎么称呼它(来更新"expiration_days"列中的记录,该列是子查询的一部分,我在子查询中计算了用户密码过期的天数。要从子查询中获取值并在实际表中更新这些值的列称为"倒计时"。我将子查询结果命名为"query"(派生表(。到目前为止,我有这个:

UPDATE LOGIN_INFO
SET expiration_days = query.countdown
FROM (
select li.name as name, countdown = 365 - datediff(day, sl.pwdate, getdate())
from master..syslogins sl, LOGIN_INFO li
where li.name = sl.name) query
WHERE LOGIN_INFO.name = query.name

我遇到的问题是我得到了这个错误:您不能在UPDATE或DELETE语句的FROM子句中使用派生表(我还得到:子查询where子句上的'('附近的语法不正确(

有没有一种方法可以让我从select语句中的计算列中获取结果,并用一个查询或其他简单明了的方式更新LOGIN_INFO表中的列?

也许是类似的东西

update login_info
set    expiration_days = (select 365 - datediff(day,s1.pwdate,getdate())
from   master..syslogins s1
where  s1.name = li.name)
from   login_info li
where  exists(select 1
from   master..syslogins s2
where  s2.name = li.name)

注意:

  • 添加exists()子句是为了确保我们不会错误地更新login_info中在syslogins中不匹配的行,否则OP将需要相应地修改逻辑(即,如果syslogins中不存在匹配行,则将expiration_days设置为什么?(
  • 如果syslogins.pwdate是NULL(我目前无法访问正在运行的ASE实例(,那么OP将需要额外的逻辑来处理s1.pwdate为NULL的场景;默认countdown为某个硬编码值?或者可能修改CCD_ 9以包括附加子句CCD_

相关内容

  • 没有找到相关文章

最新更新