今晚写数据库应用程序的时候发现,我的sql2000竟然出问题了
(程序写到了数据库记录的删除部分,难道是错误操作导致数据库崩溃?可是出问题后,删除记录这部分功能还是很正常啊)原来运行一直很正常的程序突然在运行期间出了问题,检查了一下,发现是sql语句执行 runtime error
嵌套查询,提示 “子查询返回的值多于一个。当子查询跟随在 =、!=、<、<=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”可是之前运行一直良好,后来拿同样的sql语句和程序到别的机子试了试,都运行证常why ? sql 2000 崩溃了??? whan can i do ?

解决方案 »

  1.   

    提示 “子查询返回的值多于一个。当子查询跟随在 =、!=、 <、 <=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。” 这个 提示够明显了啊
      

  2.   

    我了解这个提示的意思
    可是, 1 是之前运行很正常,哪怕是30分钟前
          2 是我拿到别的机子去用, 无论是同样的sql语句,还是同样的程序,都很正常
      

  3.   

    很显然是你所查询的数据表中的数据跟其他环境以及本机环境下某个时间点之前的差异导致的,一个例子:
    --生成部分测试数据
    declare @t table(ID int,Code varchar(10))
    insert into @t select 1,'AAAA'
    insert into @t select 2,'BBBB'
    insert into @t select 3,'CCCC'--以下SQL在当前状态下执行正确
    select * from @t t where t.ID=(select ID from @t where Code='AAAA')--新增一条记录,该记录将导致上述查询语句子查询的返回数据从1条变成两条
    insert into @t select 4,'AAAA'--再执行该查询语句,数据库提示出错
    select * from @t t where t.ID=(select ID from @t where Code='AAAA')
      

  4.   

    谢谢 libin_ftsafe, 你给的语句确是让我的机子提示了一样的错误, 请问这样的问题能够解决吗? 谢谢
      

  5.   

    新增数据后ID的值有两个。不能用=了。。改IN
      

  6.   

    select * from @t t where exists(select ID from @t where Code='AAAA')
      

  7.   

    --再执行该查询语句,数据库提示出错
    select * from @t t where t.ID=(select ID from @t where Code='AAAA')--一个ID等于行个子查询结果
      

  8.   

    用一个id等于了多个子查询结果,改用in就行了。
    之前你的程序运行没问题是由于数据不多,没有子查询就一个结果,没暴露出问题
      

  9.   

    提示 “子查询返回的值多于一个。当子查询跟随在 =、!=、 <、 <=、>、>= 之后,或子查询用作表达式时,这种情况是不允许的。”  应该是有问题呢,仔细的看哈
      

  10.   

    你把SQL语句贴出来。肯定是下面,这两种情况select *,(select customer_id ---)
    from 表
    或select *
    from 表
    where id =(select customer_id ---)子查询在这两种情况下要保证查出来的数据是一个,而不是多个,多个即为数组集合
    你以前的数据查出来是一个,而现在查出来是多个多个数据的集合怎么能和一个数值来进行相等操作呢。
    把select 后面加个top 1 吧
      

  11.   

    谢谢大家,问题归结为 我写的sql相对于我的数据库确实存在问题,要操作的库本来设置是不允许重复记录的,但由于误操作里面有了重复记录,导致出错,修改库记录后问题结决,谢谢大家的提示和帮助!分不多,不好意思了,揭贴