if exists(select * from sysobjects where type='p' and name='num')
drop procedure num
go
create procedure num
@temp varchar(20) output
as
declare @maxbillno varchar(20)
--declare @temp varchar(20)
declare @id varchcar(20)
select @maxbillno='MEDZ0000'
BEGIN
select @id=id from aa
update aa set id=id+1 
select @temp='MED'+right((right(@MaxBillNo,4)+@id),4)
update bb set id=@temp
--select id from bb
END
go
1.在delphi里怎样调用这段代码
2.如果没有@temp输出参数,最后那段代码没注销,又怎样调用
麻烦写出调用代码(上面代码没运行,也不知道对不)

解决方案 »

  1.   

    用storeproc控件调用,上面的存储过程在SQL 数据库中创建,然后再调用.
      

  2.   

    也可用adoquery 调用
    如下
    adoquery1.close
    adoquery1.sql.clear;
    adoquery1.sql.add('exec num')//無參數
    adoquery1.sql.add('exec num '+quotedstr(參數值1)+','+quotedstr(參數值n)//有參數
    adoquery1.ExecSQL
      

  3.   

    感谢xzl_kye(xiezhangliang)老兄,回去试试再结贴
      

  4.   

    怎样才能把调用的储存过程(有参数的)显示在程序中的某个控件中呢?比如说eidt中
    with adoquery1 do
    begin
    close;
    sql.clear;
    sql.add('exec num '+quotedstr(參數值1);
    ExecSQL;
    end;
    下面的代码又怎样写
      

  5.   

    如果存储过程中最后的select代码没有删除;可以考虑将delphi中代码改写如下
    with adoquery1 do
    begin
    close;
    sql.clear;
    sql.add('exec num '+quotedstr(參數值1);
    open;                      //因为有语句返回;所以要用open
    edit1.text := Fields[0].asstring;
    edit2.text := FieldByname('id').asstring;
    end;
      

  6.   

    我说的是有参数(@temp)输出,如果最后一句没有删,就可以不用参数了。我要用的是,最后一句被删了,直接通过@temp参数输出,然后在edit中显示。