SQL问题列前缀deleted与查询中所用的表名或别名不匹配

齐春辉 2019-12-21 23:55:00

推荐回答

看你要如何操作.比如你是要做删除日志类操作,那么直接INSERTINTO日志表SELECT*FROMdeleted;SQLServer简单的触发器的例子-inserted与deleted的使用http://hi.baidu.com/wangzhiqing999/blog/item/6a325cbb7601cf1f18d81f60.html但是如果你是要做复杂的操作,比如删除一个,要检索其他的表,去核对数据,判断是否允许检查之类的操作的话。那么你可能需要用游标来遍历deleted表SQLServer游标处理http://hi.baidu.com/wangzhiqing999/blog/item/49b9c7280c4963e28b139970.html。
樊扬诗2019-12-22 00:36:40

提示您:回答为网友贡献,仅供参考。

其他回答

  • 在执行insert或update语句时,插入到触发表中的新行同时添加到inserted表中。而执行delete和update语句时,从触发表中删除的行被插入到deleted表中。Inserted和deleted表的内容临时表        Insert操作        Delete操作    Update操作    Inserted       所插入的内容    空              修改后的内容    deleted        空              所删除的内容    修改前的内容。
    齐晗希2019-12-22 00:18:54
  • 在SQL中存在两个隐藏表,该表在执行过程中存在的,执行完毕后是不存在的!这两个表就是deleted和inserted表,当进行删除时,先将删除数据存入到deleted表中,然后在任务提交后清空deleted表,所以在数据库中并没有存在update表.要进行回滚等操作时可以直接查看两个表就可以了,所以没有必要再设计一个update表,且一个表也难以表达数据——如果不记录更新前数据与更新后数据怎么实现事务的提交与回滚?显然update不是一张表所能实现的,deleted与inserted共同实现是十分合理的。
    车少辉2019-12-22 00:06:36

相关问答

本文主要分析了in和exists的区别与执行效率的问题:in可以分为三类:1、形如select*fromt1wheref1in''a'',''b'',应该和以下两种比较效率。select*fromt1wheref1=''a''orf1=''b''或者select*fromt1wheref1=''a''unionallselect*fromt1f1=''b''你可能指的不是这一类,这里不做讨论。2、形如select*fromt1wheref1inselectf1fromt2wheret2.fx=''x'',其中子查询的where里的条件不受外层查询的影响,这类查询一般情况下,自动优化会转成exist语句,也就是效率和exist一样。3、形如select*fromt1wheref1inselectf1fromt2wheret2.fx=t1.fx,其中子查询的where里的条件受外层查询的影响,这类查询的效率要看相关条件涉及的字段的索引情况和数据量多少,一般认为效率不如exists。除了第一类in语句都是可以转化成exists语句的,一般编程习惯应该是用exists而不用in.A,B两个表,1当只显示一个表的数据如A,关系条件只一个如ID时,使用IN更快:select*fromAwhereidinselectidfromB2当只显示一个表的数据如A,关系条件不只一个如ID,col1时,使用IN就不方便了,可以使用EXISTS:select*fromAwhereexistsselect1fromBwhereid=A.idandcol1=A.col13当只显示两个表的数据时,使用IN,EXISTS都不合适,要使用连接:select*fromAleftjoinBonid=A.id所以使用何种方式,要根据要求来定。这是一般情况下做的测试:测试结果:setstatisticsioonselect*fromsysobjectswhereexistsselect1fromsyscolumnswhereid=syscolumns.idselect*fromsysobjectswhereidinselectidfromsyscolumnssetstatisticsiooff47行受影响表''syscolpars''。扫描计数1,逻辑读取3次,物理读取0次,预读2次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响44行受影响表''syscolpars''。扫描计数47,逻辑读取97次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响setstatisticsioonselect*fromsyscolumnswhereexistsselect1fromsysobjectswhereid=syscolumns.idselect*fromsyscolumnswhereidinselectidfromsysobjectssetstatisticsiooff419行受影响表''syscolpars''。扫描计数1,逻辑读取10次,物理读取0次,预读15次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响419行受影响表''syscolpars''。扫描计数1,逻辑读取10次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。表''sysschobjs''。扫描计数1,逻辑读取3次,物理读取0次,预读0次,lob逻辑读取0次,lob物理读取0次,lob预读0次。1行受影响测试结果总体来讲exists比in的效率高:效率:条件因素的索引是非常关键的把syscolumns作为条件:syscolumns数据大于sysobjects用in扫描计数47,逻辑读取97次,用exists扫描计数1,逻辑读取3次把sysobjects作为条件:sysobjects的数据少于syscolumnsexists比in多预读15次。