写语句之前要想好自己在做什么?函数没有什么实质性的作用left(@s,charindex('/',@s+'/')-1)--这样用行了存储过程是没有贴完整吧?
select @f_id=@@identity--获取没有返回和调用(没意义)
循环没意义,用if判断就行了
if(charindex(@f_fuliao,'/')>'0')--*
begin
set @t=dbo.getbbya(@f_fuliao,'/')
select @a_id2=a_id from PF_fuliao where a_name=@t
end---*

解决方案 »

  1.   

    CREATE  PROCEDURE PF_Addformula
    @f_Num nvarchar(10),
    @f_name nvarchar(80),
    @f_field nvarchar(80),
    @f_style nvarchar(20),
    @f_yxcf nvarchar(200),
    @f_fuliao nvarchar(200),
    @f_morename nvarchar(100)
    AS
    insert into PF_formula (f_Num,f_name,f_field,f_style,f_yxcf,f_fuliao,f_morename,f_addtime)
     values(@f_Num,@f_name,@f_field,@f_style,@f_yxcf,@f_fuliao,@f_morename,convert(varchar(16),getdate(),109))
    declare @t varchar(50),@f_id int,@a_name nvarchar(100),@a_id2 int
    select @f_id=@@identity
    while(charindex(@f_fuliao,'/')>'0')
    begin
    set @t=dbo.getbbya(@f_fuliao,'/')
    select @a_id2=a_id from PF_fuliao where a_name=@t
    set   @f_fuliao  =   stuff(@f_fuliao,1,len(@t)+1,'')end
    GO
      

  2.   

    set   @f_fuliao  =   stuff(@f_fuliao,1,len(@t),'')
    改成:
    set   @f_fuliao  =   stuff(@f_fuliao,1,len(@t)+1,'')
      

  3.   

    用不用函数都一样,关键是你循环后面还差了一句:
    CREATE  PROCEDURE PF_Addformula
    @f_Num nvarchar(10),
    @f_name nvarchar(80),
    @f_field nvarchar(80),
    @f_style nvarchar(20),
    @f_yxcf nvarchar(200),
    @f_fuliao nvarchar(200),
    @f_morename nvarchar(100)
    AS
    insert into PF_formula (f_Num,f_name,f_field,f_style,f_yxcf,f_fuliao,f_morename,f_addtime)
     values(@f_Num,@f_name,@f_field,@f_style,@f_yxcf,@f_fuliao,@f_morename,convert(varchar(16),getdate(),109))
    declare @t varchar(50),@f_id int,@a_name nvarchar(100),@a_id2 int
    select @f_id=@@identity
    while(charindex(@f_fuliao,'/')>'0')
    begin
    set @t=left(@f_fuliao,charindex('/',@f_fuliao)-1)
    set @f_fuliao=right(@f_fuliao,len(@f_fuliao)-len(@t)-1
    select @a_id2=a_id from PF_fuliao where a_name=@t
    end
    select @a_id2=a_id from PF_fuliao where a_name=@f_fuliao
    GO
      

  4.   

    差了个括号:
    CREATE  PROCEDURE PF_Addformula
    @f_Num nvarchar(10),
    @f_name nvarchar(80),
    @f_field nvarchar(80),
    @f_style nvarchar(20),
    @f_yxcf nvarchar(200),
    @f_fuliao nvarchar(200),
    @f_morename nvarchar(100)
    AS
    insert into PF_formula (f_Num,f_name,f_field,f_style,f_yxcf,f_fuliao,f_morename,f_addtime)
     values(@f_Num,@f_name,@f_field,@f_style,@f_yxcf,@f_fuliao,@f_morename,convert(varchar(16),getdate(),109))
    declare @t varchar(50),@f_id int,@a_name nvarchar(100),@a_id2 int
    select @f_id=@@identity
    while(charindex(@f_fuliao,'/')>'0')
    begin
    set @t=left(@f_fuliao,charindex('/',@f_fuliao)-1)
    set @f_fuliao=right(@f_fuliao,len(@f_fuliao)-len(@t)-1)
    select @a_id2=a_id from PF_fuliao where a_name=@t
    end
    select @a_id2=a_id from PF_fuliao where a_name=@t
    GO
      

  5.   

    不好意思,又写错了....汗.....
    CREATE  PROCEDURE PF_Addformula
    @f_Num nvarchar(10),
    @f_name nvarchar(80),
    @f_field nvarchar(80),
    @f_style nvarchar(20),
    @f_yxcf nvarchar(200),
    @f_fuliao nvarchar(200),
    @f_morename nvarchar(100)
    AS
    insert into PF_formula (f_Num,f_name,f_field,f_style,f_yxcf,f_fuliao,f_morename,f_addtime)
     values(@f_Num,@f_name,@f_field,@f_style,@f_yxcf,@f_fuliao,@f_morename,convert(varchar(16),getdate(),109))
    declare @t varchar(50),@f_id int,@a_name nvarchar(100),@a_id2 int
    select @f_id=@@identity
    while(charindex(@f_fuliao,'/')>'0')
    begin
    set @t=left(@f_fuliao,charindex('/',@f_fuliao)-1)
    set @f_fuliao=right(@f_fuliao,len(@f_fuliao)-len(@t)-1)
    select @a_id2=a_id from PF_fuliao where a_name=@t
    end
    select @a_id2=a_id from PF_fuliao where a_name=@f_fuliao
    GO
      

  6.   

    while(charindex(@f_fuliao,'/')<>0)
    这句话下面的东西都不执行!!!急救!