TSL语言基础 > SQL基础到TS-SQL > TS-SQL入门 > TS-SQL的数据更新

Update更新结果集中符合条件的值    

  •   我们经常会有行记录的数据更新需求,Update就是为了这种需求而产生的。
      我们继续沿用上边所用的结果集,假定我们发现学号为03的英语成绩应该修订为79分,我们可以用如下代码来处理:
      Update B set ["英语成绩"] = 79 where ["学号"] = "03" end;
      看起来语法很简单,Update之后set之前是需要更新的结果集,在set之后用[FieldName]=Value的模式将值更新给符合条件的行的FieldName字段,而条件则和select一样使用where子句。
      不用多加解释,但是我们还是需要读者去思考一下几个问题:如果更新不需要条件呢?如果一次要更新多个字段呢?如果更新的字段不存在呢?
      答案:
      第一个问题,更新不需要条件则可以省略Where子句,这听起来很简单,但是问题带来了,什么时候才不需要使用Where子句?不使用Where子句可以实现什么?当然,不需要使用Where子句是有需求的,一种典型的需求是假定我们有一个数据表,其中有一个数据合法的标示,我们一次性把合法标示设置成1标示合法,Update R set ["合法标示"] = 1 end;另一种典型需求则是对所有行按照某种规则进行更新,例如假定英语考试太难,导致不及格率太高,老师大发慈悲,决定把英语成绩进行一次调整,调整的方法是将原始成绩开根号再乘以十,这可以这样实现:Update B set ["英语成绩"]=sqrt(["英语成绩"])*10 end;也就是说,我们在更新的时候,值可以引用原结果集进行计算。
      第二个问题,Update支持多个字段的同时更新,例如:
      Update B set ["英语成绩"]=79,["语文成绩"]=80 where ["学号"]="03" end;
      即允许存在多个[FieldName]=Value,之间使用逗号","进行分隔。
      第三个问题,如果TS-SQL更新的内容是内存的结果集(而非实体数据库),而需要更新字段不存在,会自动产生新列存贮更新的数据,上边的第二个问题的B结果集则自动增加了"英语成绩"列。