CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
不看会后悔的Windows XP之经验谈 简单快捷DIY实用家庭影院
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  MS-SQL Server >  基础类

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

楼主luosjz(你好)2006-07-01 10:15:46 在 MS-SQL Server / 基础类 提问

存储过程错误,执行存储过程数据没有错,但是报上面的错误.  
   
  CREATE   procedure   ChangeOrgan  
  (  
  @up_organ   int,--上级机构  
  @my_organ   int--本级机构  
  )  
  as  
  --declare   @up_organ   int  
  --set   @up_organ=7  
  --declare   @my_organ   int  
  --set   @my_organ=54  
   
  DECLARE   @ERROR   INT  
  SELECT   @ERROR=0  
   
  declare   @my_treeno   varchar(20)--取本级机构树NO  
  declare   @up_treeno   varchar(20)--取要移动到的父机构树NO  
  declare   @max_treeno   varchar(20)  
  declare   @Channel_type_id   int----上级通道类型  
  declare   @my_channel_type_id   int   --本级通道类型  
  select   @Channel_type_id=Channel_type_id   from   sys_organ   where   organ_sys_id=@up_organ  
  select   @my_channel_type_id=Channel_type_id   from   sys_organ   where   organ_sys_id=@my_organ  
  select   @my_treeno=sys_tree_no   from   sys_organ   where   organ_sys_id=@my_organ  
  select   @up_treeno=sys_tree_no   from   sys_organ   where   organ_sys_id=@up_organ  
  ------要移动的机构的下面的所有机构ID  
  --drop   table   #tmp  
  select   organ_sys_id   into   #tmp   from   sys_organ   where   sys_tree_no   like   @my_treeno+'%'  
  ----------本级机构不为1(总部)---------------------------------------------------------------  
  BEGIN   TRAN  
  if   @my_organ<>1  
  begin  
        if   len(@my_treeno)>len(@up_treeno)-1  
                begin  
                    ---可以随便移动-----  
                    ---查询父机构下的同级最大树编号declare   @max_treeno   varchar(20)  
                    select   @max_treeno=max(sys_tree_no)   from   sys_organ   where   up_organ_sys_id=@up_organ  
                    set   @max_treeno='0'+cast(@max_treeno+1   as   varchar)  
                    --修改树NO  
                    update   sys_organ  
                            set   sys_tree_no=@max_treeno+substring(sys_tree_no,len(@my_treeno)+1,len(sys_tree_no))  
                    where   organ_sys_id   in   (select   *   from   #tmp)  
    SELECT   @ERROR=@ERROR+@@ERROR                                      
                    --本机构的上级机构  
                    update   sys_organ  
                            set   up_organ_sys_id=@up_organ  
                    where   organ_sys_id=@my_organ  
    SELECT   @ERROR=@ERROR+@@ERROR                                
                    --------------------------------------------------------  
                    update   sys_organ  
                            set   org_level_recno=len(sys_tree_no)/2,  
                            Channel_type_id=@Channel_type_id+Channel_type_id-@my_channel_type_id+1  
                    where   organ_sys_id   in   (select   *   from   #tmp)  
    SELECT   @ERROR=@ERROR+@@ERROR                                  
                    -------------------------------------------------------------------  
                    insert   into   tmp_sys_organ_update(organ_sys_id,sys_tree_no,organ_man_id,organ_name,org_level_recno,up_organ_sys_id,  
                    country,organ_city,addr,postalcode,tele,fax,rele_man,website,email,organ_des,organ_note,  
                    rec_created,Channel_type_id,create_date,running_date,liquidate_date,stop_date,organ_state_id,  
                    organ_sName,own_db,FIsConfirm,FRequestOnlyTop,FCityId)  
                    select   organ_sys_id,sys_tree_no,organ_man_id,organ_name,org_level_recno,up_organ_sys_id,  
                    country,organ_city,addr,postalcode,tele,fax,rele_man,website,email,organ_des,organ_note,  
                    rec_created,Channel_type_id,create_date,running_date,liquidate_date,stop_date,organ_state_id,  
                    organ_sName,own_db,FIsConfirm,FRequestOnlyTop,FCityId    
                    from   sys_organ   where   organ_sys_id   in   (select   *   from   #tmp)                                    
                    -----------------------------------------------------------------------------  
    SELECT   @ERROR=@ERROR+@@ERROR                                  
                    drop   table   #tmp  
    SELECT   @ERROR=@ERROR+@@ERROR  
                end  
        else  
                begin  
                      ---不能移动到它的下级菜单中----------  
                      if   @my_treeno<>substring(@up_treeno,1,len(@my_treeno))  
                      begin  
                      ----移动位置------  
                            select   @max_treeno=max(sys_tree_no)   from   sys_organ   where   up_organ_sys_id=@up_organ  
                            set   @max_treeno='0'+cast(@max_treeno+1   as   varchar)  
                            --print   @max_treeno  
                            update   sys_organ  
                                    set   sys_tree_no=@max_treeno+substring(sys_tree_no,len(@my_treeno)+1,len(sys_tree_no))  
                            where   organ_sys_id   in   (select   *   from   #tmp)  
            SELECT   @ERROR=@ERROR+@@ERROR  
                            update   sys_organ  
                                    set   up_organ_sys_id=@up_organ  
                            where   organ_sys_id=@my_organ  
            SELECT   @ERROR=@ERROR+@@ERROR  
                            update   sys_organ  
                                    set   org_level_recno=len(sys_tree_no)/2,  
                                    Channel_type_id=@Channel_type_id+Channel_type_id-@my_channel_type_id+1  
                            where   organ_sys_id   in   (select   *   from   #tmp)  
            SELECT   @ERROR=@ERROR+@@ERROR  
                            -------------------------------------------------------------------  
                            insert   into   tmp_sys_organ_update(organ_sys_id,sys_tree_no,organ_man_id,organ_name,org_level_recno,up_organ_sys_id,  
                            country,organ_city,addr,postalcode,tele,fax,rele_man,website,email,organ_des,organ_note,  
                            rec_created,Channel_type_id,create_date,running_date,liquidate_date,stop_date,organ_state_id,  
                            organ_sName,own_db,FIsConfirm,FRequestOnlyTop,FCityId)  
                            select   organ_sys_id,sys_tree_no,organ_man_id,organ_name,org_level_recno,up_organ_sys_id,  
                            country,organ_city,addr,postalcode,tele,fax,rele_man,website,email,organ_des,organ_note,  
                            rec_created,Channel_type_id,create_date,running_date,liquidate_date,stop_date,organ_state_id,  
                            organ_sName,own_db,FIsConfirm,FRequestOnlyTop,FCityId    
                            from   sys_organ   where   organ_sys_id   in   (select   *   from   #tmp)  
                            -----------------------------------------------------------------------------  
            SELECT   @ERROR=@ERROR+@@ERROR  
                            drop   table   #tmp  
            SELECT   @ERROR=@ERROR+@@ERROR  
                      end  
                end  
  end  
  IF   (@ERROR=0)  
        COMMIT   TRAN  
  ELSE  
        ROLLBACK   TRAN  
  GO  
  问题点数:30、回复次数:12Top

1 楼paoluo(一天到晚游泳的鱼)回复于 2006-07-01 10:22:14 得分 0

#tmp的表結構是怎樣的??只有一列嗎??如果有多列就會報這個錯誤。Top

2 楼luosjz(你好)回复于 2006-07-01 10:36:06 得分 0

#tmp   只有一列Top

3 楼paoluo(一天到晚游泳的鱼)回复于 2006-07-01 11:08:27 得分 3

不好意思,太長了,居然沒有看到這一句。  
   
  select   organ_sys_id   into   #tmp   from   sys_organ   where   sys_tree_no   like   @my_treeno+'%'  
  Top

4 楼hellowork(一两清风)回复于 2006-07-01 11:16:37 得分 3

没看出存储过程有什么问题.楼主可以把存储过程中的代码分离出来,然后在查询分析器中直接执行一下,看是否还出现同样错误.Top

5 楼panjinfu80(天蓝水晶)回复于 2006-07-01 11:21:30 得分 3

select   @Channel_type_id=Channel_type_id   from   sys_organ   where   organ_sys_id=@up_organ  
  select   @my_channel_type_id=Channel_type_id   from   sys_organ   where   organ_sys_id=@my_organ  
  select   @my_treeno=sys_tree_no   from   sys_organ   where   organ_sys_id=@my_organ  
  select   @up_treeno=sys_tree_no   from   sys_organ   where   organ_sys_id=@up_organ  
  -------------------  
  返回多个值。  
  一个变量只能赋一个值。Top

6 楼paoluo(一天到晚游泳的鱼)回复于 2006-07-01 11:27:05 得分 3

panjinfu80(天蓝水晶)   (   )   信誉:100     2006-07-01   11:21:00     得分:   0      
     
     
        select   @Channel_type_id=Channel_type_id   from   sys_organ   where   organ_sys_id=@up_organ  
  select   @my_channel_type_id=Channel_type_id   from   sys_organ   where   organ_sys_id=@my_organ  
  select   @my_treeno=sys_tree_no   from   sys_organ   where   organ_sys_id=@my_organ  
  select   @up_treeno=sys_tree_no   from   sys_organ   where   organ_sys_id=@up_organ  
  -------------------  
  返回多个值。  
  一个变量只能赋一个值。  
       
     
  -------------------------------------------------  
  理解有誤,這段代碼是不會出錯的,會把最後一個sys_tree_no賦值給@up_treeno。  
   
  看看這個例子。  
   
   
  Declare   @T   Table   (ID   Int,   TESTTime   smalldatetime)  
  Insert   @T   Select   1,'2006-6-20'  
  Union   All   Select   2,'2005-1-16'  
   
  Declare   @ID   Int  
  Select   @ID=ID   From   @T  
  Select   @IDTop

7 楼panjinfu80(天蓝水晶)回复于 2006-07-01 14:52:33 得分 2

是的,上面是没有错的,我是记错了。  
  这个就错了。  
  Declare   @T   Table   (ID   Int,dd   int,   TESTTime   smalldatetime)  
  Insert   @T   Select   1,1,'2006-6-20'  
  Union   All   Select   2,1,'2005-1-16'  
  Union   All   Select   2,2,'2005-1-26'  
   
  Declare   @ID   Int  
  Set   @ID=(select   dd   From   @T   where   id=2)  
  Select   @ID  
  Top

8 楼panjinfu80(天蓝水晶)回复于 2006-07-01 14:53:03 得分 1

 
  (所影响的行数为   3   行)  
   
  服务器:   消息   512,级别   16,状态   1,行   7  
  子查询返回的值多于一个。当子查询跟随在   =、!=、<、<=、>、>=   之后,或子查询用作表达式时,这种情况是不允许的。  
   
  (所影响的行数为   1   行)Top

9 楼paoluo(一天到晚游泳的鱼)回复于 2006-07-01 14:57:14 得分 2

對,這樣就是錯誤的,所以說錯誤原因不在那一段代碼。Top

10 楼lengxiaowei(小伟)回复于 2006-07-01 15:55:30 得分 10

你是不是有触发器啊Top

11 楼paoluo(一天到晚游泳的鱼)回复于 2006-07-01 15:57:39 得分 1

lengxiaowei(小伟)   (   )   信誉:99     2006-07-01   15:55:00     得分:   0      
     
     
        你是不是有触发器啊  
       
     
  ----------------------  
  聰明!!  
   
  沒想到這個上,照這個分析,很有可能是某個表上的觸發器有問題。Top

12 楼singlepine(小山)回复于 2006-07-02 13:45:23 得分 2

where   organ_sys_id   in   (select   *   from   #tmp)  
  一律改为  
  where   organ_sys_id   in   (select   organ_sys_id   from   #tmp)Top

相关问题

关键词

得分解答快速导航

  • 帖主:luosjz
  • paoluo
  • hellowork
  • panjinfu80
  • paoluo
  • panjinfu80
  • panjinfu80
  • paoluo
  • lengxiaowei
  • paoluo
  • singlepine

相关链接

  • SQL Server类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
北京创新乐知广告有限公司 版权所有, 京 ICP 证 070598 号
世纪乐知(北京)网络技术有限公司 提供技术支持
Copyright © 2000-2008, CSDN.NET, All Rights Reserved
GongshangLogo