drop table resIntru  
--创建当前用户发展的所有子代   
create table resIntru
(
 resIntruId int identity(1,1) primary key,
 userId int,  --子代Id
 stateId int --当前位置
)/**查询当前用户的所有子代用户存储过程*/
drop proc pro_resIntru
create proc pro_resIntru       
 @userMobile varchar(80)--当前用户
as
begin
declare    
 @userIdNow int,--当前用户Id
 @intBeIdNow int,--推荐人Id 
 @stateId int,--当前用户在族谱中的位置
 @baseStateId int,--以当前用户的根的最大位置
 @beginState int--以当前用户的根的最大位置
 --清空用子信息表
 delete from resIntru
        set @beginState=1
 --当前用户所在族谱中的位置
 select @stateId=resState from tb_reship where resMobile=@userMobile 
 --以当前用户的根的最大位置
 select @baseStateId=max(resState) from tb_reship where resBaseUserId=(select resBaseUserId from tb_reship where resMobile=@userMobile)
 --获取当前用户的直接子代userId,添加到resIntru表中
 insert into resIntru (userId,stateId) select userId,@beginState from tb_intruduce where intBeId=(select userId from tb_user where userMobile=@userMobile)
        while(@stateId<@baseStateId-1)--循环次数
 begin
  set @beginState=@beginState+1
  --获取当前用户的间接子代userId,添加到resIntru表中
  insert into resIntru(userId,stateId) select userId,@beginState from tb_intruduce where intBeId in (select userId from resIntru)
  set @stateId=@stateId+1
 end
 --获取所有子代用户号码 
 select u.userMobile,r.stateId from tb_user u,resIntru r where u.userid=r.userid
end
GO
--执行存储过程
exec pro_resIntru '123123123'
如何用PHP调用这个存储过程呢??  请大家给个详细的答案!

解决方案 »

  1.   

     1。调用存储过程的方法。      a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,      一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql        变量。      b。如果存储过程有OUT变量,声明一个Mysql变量。        mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句。        入set @mysqlvar=$phpvar ;      c。使用mysql_query()/mysql_db_query()执行mysql 变量声明语句。        mysql_query("set @mysqlvar【=$pbpvar】");        这样,在mysql服务器里面就有一个变量,@mysqlar。如果时IN参数,那么其值可以有phpar传入。      d。 如果时存储过程。          1。执行 call procedure()语句。            也就是mysql_query("call proceduer([var1]...)");          2. 如果有返回值,执行select  @ar,返回执行结果。             mysql_query("select @var)"             接下来的操作就和php执行一般的mysql语句一样了。可以通过mydql_fetch_row()等函数获得结果。          如果时函数。 直接执行 select function() 就可以了。
    $host="localhost";
        $user="root";
        $password="11212";
        $db="samp_db";
        $dblink=mysql_connect($host,$user,$password)
                or die("can't connect to mysql");
    mysql_select_db($db,$dblink)
          or die("can't select samp_db");
        $res=mysql_query("set @a=$password",$dblink);
        $res=mysql_query("call aa(@a)",$dblink);
        $res=mysql_query("select @a",$dblink);
        $row=mysql_fetch_row($res);
        echo $row[0];
      

  2.   

     1。调用存储过程的方法。       a。如果存储过程有 IN/INOUT参数,声明一个变量,输入参数给存储过程,该变量是一对,       一个php变量(也可以不必,只是没有php变量时,没有办法进行动态输入),一个Mysql         变量。       b。如果存储过程有OUT变量,声明一个Mysql变量。         mysql变量的声明比较特殊,必须让mysql服务器知道此变量的存在,其实也就是执行一条mysql语句。         入set @mysqlvar=$phpvar ;       c。使用mysql_query()/mysql_db_query()执行mysql 变量声明语句。         mysql_query("set @mysqlvar【=$pbpvar】");         这样,在mysql服务器里面就有一个变量,@mysqlar。如果时IN参数,那么其值可以有phpar传入。       d。 如果时存储过程。           1。执行 call procedure()语句。             也就是mysql_query("call proceduer([var1]...)");           2. 如果有返回值,执行select  @ar,返回执行结果。              mysql_query("select @var)"              接下来的操作就和php执行一般的mysql语句一样了。可以通过mydql_fetch_row()等函数获得结果。           如果时函数。 直接执行 select function() 就可以了。 
    $host="localhost";
        $user="root";
        $password="11212";
        $db="samp_db";
        $dblink=mysql_connect($host,$user,$password)
                or die("can't connect to mysql");
    mysql_select_db($db,$dblink)
          or die("can't select samp_db");
        $res=mysql_query("set @a=$password",$dblink);
        $res=mysql_query("call aa(@a)",$dblink);
        $res=mysql_query("select @a",$dblink);
        $row=mysql_fetch_row($res);
        echo $row[0];
      

  3.   

    恩, 是mssql。 有没有详细的调用过程, 帮我写一下?
      

  4.   

    恩 ,上面我把mssql存储过程贴出来了。  希望有好心人用php帮忙给我调用一下!
      

  5.   


    define   ("OLEDB_CONNECTION_STRING",    
      "Provider=SQLOLEDB;   Data   Source=zzb;   Initial   Catalog=Northwind;   User   ID=sa;   Password=");    
      $dbc   =   new   COM("ADODB.Connection");    
      $dbc->Open(OLEDB_CONNECTION_STRING);    
      $command   =   "pro_resIntru";    
      $rs   =   $dbc->Execute($command);只能在win服务器上运行