两种修改形式

  第一种:静态插入

 update #famousjaycess set jc='johnny cash',occupation='Singer/songwriter',becamefamous=1955,notes='began career selling ...balabala'
where jc='johnny ca'

  第二种:

 --注意别名和on后边的表连接不要写错
update f set jc='johnny cash',occupation='Singer/songwriter',becamefamous=1955,notes='began career selling ...balabala'
from #famousjaycess f
join #samefamousjaycess s on (f.becamefamous=s.becamefamous)

Halloween的问题

  在修改过程中,将被修改行在将被修改的行的列表中移动,会引起多次被修改,这种情况被称为Halloween问题。

  好在在问题发生时sql会认识到这个问题,以及那种类型的错误,然后采取措施。

  将主关键字和触发器结合起来,看上去好像会增加问题的可能性,毕竟触发器认为数据时被修改的;而实际情况是sqlserver的触发器每个语句只会执行一次,而不是每行都被触发一次

并且触发器只在数据修改之前或之后进行存取,并不是在过程中进行存取。看上去仿佛并没有什么用,但其实并不是。触发器的代码并不会和触发他们的insert、delete、update命令一起编译

执行计划。而是独立的编译并放入缓冲区,所以无论触发它的命令是什么,都可以有效的重复使用。DML语句的执行计划分支给它激发的所有触发器,这种操作在执行计划结束之前进行的。如果

是结束后就无法完成了。

  注意这种情况并不适用于约束。每个表的约束都是直接加入DML的执行计划中。

Update和Case

  通过Update使用CASE表达式,可以对表进行比较复杂的操作,但需要一定的编程逻辑。

 update titles
set price=price*case title when 'business' then 1.5
when 'mod_cook' then .8
when 'trad_cook' then .6
when 'paycholoy' then .5
when 'popular_comp' then 1.8
else .75
end

用Update做检测约束

  如果使用Bulk Insert或者其他大批量的加载数据的工具来对有insert触发器的表进行追加数据,那么会发现触发器是能被触发。而且,即使Bulk Insert不妨碍约束,也会是操作变得非常慢。

如果在载入时忽略约束,那么就快多了。有一个选项可以在载入数据之后人工的检查约束和触发器。这就要求对于每一个约束和触发器都有单独的代码,并且做大量的防止出错的操作。

另外一种方式就是在数据载入后立刻执行一个假的update操作。这个假的修改只是简单的将列值置为其本身的值。这样就会触发触发器并对约束进行检查。如果其中包含错误的行那么就会update失败。

 create table famousjaycess(
jc varchar(15) check(left(jc,3)<>'joe'),
occupation varchar(25),
becamefamous int default 0,
notes text null
) bulk insert famousjaycess from 'D:\DB\famousjaycess.bcp' update famousjaycess set
jc=jc,
occupation=occupation,
becamefamous=becamefamous,
notes=notes

限制受update影响的行的数目

  用select top n的语句可以限制受影响行的数目。select语句作为导出表嵌入在update的from子句中,并与目标表进行连接

update a
set a.contract=0 from authors a
join(select top 5 au_id from authors order by au_id) u
on a.au_id=u.au_id

sql学习--update的更多相关文章

  1. SQL学习(时间,存储过程,触发器)

    SQL学习 几个操作时间的函数 --datapart 获取时间中的年月日时分秒等部分 select DATEPART(year,current_timestamp); select DATEPART( ...

  2. SQL Server UPDATE语句的用法详解

    SQL Server UPDATE语句用于更新数据,下面就为您详细介绍SQL Server UPDATE语句语法方面的知识,希望可以让您对SQL Server UPDATE语句有更多的了解. 现实应用 ...

  3. mysql下sql语句 update 字段=字段+字符串

    mysql下sql语句 update 字段=字段+字符串   mysql下sql语句令某字段值等于原值加上一个字符串 update 表明 SET 字段= 'feifei' || 字段; (postgr ...

  4. Oracle\MS SQL Server Update多表关联更新

    原文:Oracle\MS SQL Server Update多表关联更新 一条Update更新语句是不能更新多张表的,除非使用触发器隐含更新.而表的更新操作中,在很多情况下需要在表达式中引用要更新的表 ...

  5. ORALCE PL/SQL学习笔记

    ORALCE  PL/SQL学习笔记 详情见自己电脑的备份数据资料

  6. Delphi X10.2 + FireDAC 使用 SQL 语句 UPDATE

    MainForm.Conn.StartTransaction; UserManagerQuery.SQL.Clear; UserManagerQuery.SQL.Text := 'UPDATE tab ...

  7. TERADATA SQL学习随笔<一>

    此博客内容简介及目录 http://www.cnblogs.com/weibaar/p/6644261.html 最近在TERADATA环境学习SQL.在这里记录一下学习中查过的知识点,作为备案. 目 ...

  8. SQL学习笔记一之初识数据库

    阅读目录 一 数据库管理软件的由来 二 数据库概述 三 mysql介绍 四 下载安装 五 mysql软件基本管理 六 初识sql语句 一 数据库管理软件的由来 基于我们之前所学,数据要想永久保存,都是 ...

  9. SQL SERVER Update from 使用陷阱

    原文:SQL SERVER Update from 使用陷阱 update A set from A left join B on 此方法常用来使用根据一个表更新另一个表的数据,来进行数据同步更新.若 ...

随机推荐

  1. EF 配置

    DbContext public class ZSZDbContext : DbContext { //ILog ILogger 容易混淆 private static ILog log = LogM ...

  2. java 导入导出的 命令

    $exp lddba/ld_321@192.168.1.3/testora file=E:\db_bak\ld20170219_1testora.dmp log=E:\db_bak\ld2017021 ...

  3. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法——分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  4. LeetCode 712. Minimum ASCII Delete Sum for Two Strings

    Given two strings s1, s2, find the lowest ASCII sum of deleted characters to make two strings equal. ...

  5. 【POJ 1860】Currency Exchange

    [题目链接]:http://poj.org/problem?id=1860 [题意] 给你n种货币,m种货币之间的交换信息; 交换信息以 A,B,RA,CA,RB,CB的形式给出; 即A换B的话假设A ...

  6. 【BestCoder Round #93 1001】MG loves gold

    [题目链接]:http://acm.hdu.edu.cn/showproblem.php?pid=6019 [题意] 每次选择一段连续的段,使得这一段里面没有重复的元素; 问你最少选多少次; [题解] ...

  7. UVALIVE 6958 Indoorienteering

    题目大意:有不超过14个点组成的完全图,给出邻接矩阵,问是否存在长度为W的欧拉回路? 数据范围:n<=14, w<=1e15: standard input/output 7 s, 256 ...

  8. SSH框架之Struts(3)——Struts的执行流程之核心方法

    上篇讲了Tomcat实例化一个单例的ActionServlet.依据web.xml配置文件做好对应的初始化工作. 这时client产生一个.do结尾的request请求,採用get/post方式提交之 ...

  9. ASP.NET MVC 提供与訪问 Web Api

    ASP.NET MVC 提供与訪问 Web Api 一.提供一个 Web Api 新建一个项目.类型就选 "Web Api". 我用的是MVC5,结果生成的项目一大堆东西.还编译只 ...

  10. hive 报错/tmp/hive on HDFS should be writable. Current permissions are: rwx--x--x

    启动hive时报例如以下错误:/tmp/hive on HDFS should be writable. Current permissions are: rwx--x--x 这是/tmp/hive文 ...