将标志设置为数据库列

时间:2014-04-24 07:46:41

标签: sql sql-server stored-procedures

任务是创建sql脚本,设置标志" Y"或" N"存在虚拟数据库线"状态"如果整数值更多或更少' 10'

数据库由三列组成 人 钱(5或100) 状态(虚拟 - 应通过存储过程更新)

解决方案

update status set flag = "Y" where money = '5' and 
status set flag = "N" where money = '100'

SQL脚本新手

2 个答案:

答案 0 :(得分:2)

UPDATE
  people
SET
  status = CASE WHEN money =   '5' THEN 'Y'
                WHEN money = '100' THEN 'N'
                                   ELSE status
         END
WHERE
  money IN ('5', '100')


通过该查询向后工作......

  • WHERE子句确保只更新您要更新的行。

  • CASE语句会根据status中的现有值选择要设置money的值。

  • ELSE块永远不会发生,但是作为故障安全存在(如果您在运行它时忘记包含WHERE子句,则值对于status不是statusmoney的任何行,'5'的{​​{1}}设置为当前值。


编辑:

注意:

  • '100'应该是 表的名称

  • people应该是 字段的名称


最终编辑(我现在放弃):

status

这将更新UPDATE people SET status = CASE WHEN money > 10 THEN 'Y' ELSE 'N' END ; 每个 行。

如果将people设置为status,则'Y'会将money > 10设置为status'N'

答案 1 :(得分:0)

如何使用CASE

  

评估条件列表并返回多个可能的条件之一   结果表达式。

     

CASE表达式有两种格式:

     

•简单的CASE表达式   将表达式与一组简单表达式进行比较以确定   结果

     

•搜索的CASE表达式计算一组布尔表达式   确定结果。

update [status]
set [flag] = 
    CASE 
        WHEN [money] = '5' THEN 'Y'
        WHEN [money] = '100' THEN 'N'
    END
WHERE   [money] in ('5','100')