首页
登录 | 注册

关于sql server 2005 delete语句的变态问题

有如下的语句:
declare @Subs table(id int,i_parentid int)
declare @Subs1 table(id int,i_parentid int)--这里的subs和subs1的结构是一样的。
insert into @Subs values(1,0)
insert into @Subs values(2,1)
insert into @Subs values(3,1)
insert into  @subs1 select * from @subs
 
当执行:
delete   @subs  where exists(select * from @subs1  as e2 where e2.i_parentid=id)
怎么都删不掉第一行(按理说第一行应被删掉),这是什么???
当执行:
select * from @subs  where exists(select * from @subs1  as e2 where e2.i_parentid=id)
一条记录都查询不出来(按理说第一行应被查询出来),这是为什么??
原来。在exists里面的查询中,由@subs1也有一个列叫id,在where后面的那个id被sql server当成是@subs1的id,而不是@subs的id。所以出来不想要的结果。
解决办法就是将@subs1中的第一个列名改过来,如:改成id1,结果就正常了。
这也就解释清楚为什么用delete删除数据时,最好不要用连接。例如:
delete   @subs from @subs e2 where e2.i_parentid<>id  --结果是要么全删除,要么一条都删除不掉。
 

相关文章

  • 新建函数: set ANSI_NULLS ON set QUOTED_IDENTIFIER ON go --支持分割符多字节 --使用方法 --select * from dbo.split('abc-def-ghi-jkl','-') - ...
  • Oracle数据库 测试平台 - Database 11gR2/12cR2 --数据字典表级信息 SELECT USER,T.TABLE_NAME,TC.COMMENTS,DECODE(C.CONSTRAINT_NAME,NULL,'N', ...
  • SQL Server横向扩展方案-P2P
    在上一篇文章中,介绍了SODA的相关的内容,我们本篇接着没有完成的话题继续. Peer-to-Peer Transactional Replication 翻译为中文就是"点到点的事务复制",简称P2P.P2P的技术在S ...
  • Java调用SQL Server的存储过程详解
    1使用不带参数的存储过程 使用 JDBC 驱动程序调用不带参数的存储过程时,必须使用 call SQL 转义序列.不带参数的 call 转义序列的语法如下所示: {call 存储过程名} 作为实例,在 SQL Server 2005 Adv ...
  • 目录 l 摘要l 一般安装程序的制作l 在安装程序中部署SQL Server数据库1. 通过调用osql来执行数据库脚本文件2. 通过把脚本文件作为资源文件载入3. 通过sp_attach_db来创建数据库l 总结 摘要一个项目完成之后,安 ...
  •      初学数据库编程我们可能会有一些对"空值"的疑问,比如通过编程新建的一个表中所有数据皆显示为,手动添加并删除文字后又变成了空白:一个字符串类型的字段,明明没有填值,却不等于"":用ADO.NE ...

2020 unjeep.com webmaster#unjeep.com
12 q. 0.012 s.
京ICP备10005923号