参数表:参数   值
 A      1
 B      2
 D      3
因为参数表经常变化,我想并动态创建一个函数,创建时遍历参数表,这个需要游标,请问这样的存储过程该怎么写?
CREATE function dbo.aaa(@st varchar(15)) 
returns varchar(12) 
as 
begin 
declare @p varchar(12) 
if @st='A' set @p='1'  
else if @st='B' set @p='2'  
else if @st='D' set @p='3' 
else   set @p='x' 
return  @p 
end

解决方案 »

  1.   

    create proc proc_name
    @st varchar(15),
    @ret varchar(15) output
    as
    select @ret = 值 from tablename where 参数 = @st
    set @ret = isnull(@ret,'x')
    go
      

  2.   

    CREATE function dbo.aaa(@st varchar(15))   
    returns varchar(12)   
    as   
    begin   
    declare @p varchar(12)  
    select @p=值 from [参数表] where 参数=@st 
    return     @p   
    end
      

  3.   

    各位老大,不是这个意思,我的意思的把"参数表"中的数据用游标逐行取出来,动态创建一个函数,该函数包含"参数表"中所有的数据.因为要大数据量查询,这样比较快,而不是每次去查询参数表. 每次参数表中有更改就执行这个存储过程. 应该类似这样
    declare @SQL nvarchar(8000)
    set @SQL= 'CREATE function dbo.aaa(@st varchar(15)) returns varchar(12) as"   
     这里用游标把参数表中所有数据遍取出, 参数表中有几行这里就生成几行
      set @sql= @sql +  ' if   @st='A'   set   @p='1' '      
    SET @SQL=@sql + 'else  set   @p='x' return @p '
                        
    EXEC (@SQL)    
      

  4.   

    第一行应该先删除:if exists(select 1 from sysobjects where name='aaa' and xtype='FN' and status>0) drop function aaa
      

  5.   

    我想要的大致是这样的,我不会写游标,哪位高手帮我写一个,多谢了!
    CREATE PROCEDURE CREAaaa ()
    AS
    declare   @SQL   nvarchar(8000) 
    if exists(select 1 from sysobjects where name='aaa' and xtype='FN' and status>0) drop function aaa
    set @SQL=   'CREATE   function   dbo.aaa(@st   varchar(15))   returns   varchar(12)   as"       
    declare   cursor1   cursor   for   select   参数,值   from  参数表 
    open   cursor1 
    fetch   cursor1   into   
    while(@@fetch_status   =   0) 
    begin    这里用游标把参数表中数据循环取出,  生成动态字符串
        set   @sql=   @sql   +     '   if       @st=参数      set       @p=值 ' 
    end
               
    SET   @SQL=@sql   +   'else     set       @p='x'   return   @p   '                                       
    EXEC   (@SQL)        
    RETURN
    GO
      

  6.   

    谁能帮我改改啊, 游标第一行该怎么判断?
    CREATE PROCEDURE CREAaaa ()
    AS
    declare   @SQL   nvarchar(8000) ,@CanSu varchar(20), @Zhi varchar(20),if exists(select 1 from sysobjects where name='''aaa''' and xtype='FN' and status>0) drop function aaa
    set @SQL=   'CREATE   function   dbo.aaa(@st   varchar(15))   returns   varchar(12)   as"       
     
    declare   cursor1   cursor   for   select   参数,值   from  参数表 
    open   cursor1 
    fetch   cursor1   into   @CanSu, @Zhi
    while(@@fetch_status   =   0) 
    begin    这里用游标把参数表中所有数据遍取出,  生成动态字符串
        set   @sql=@sql + 'if @st= ' + @CanSu + 'set  @p=''' + @Zhi 
    end
               
    SET   @SQL=@sql   +   'else     set       @p='x'   return   @p   '                                       
    EXEC   (@SQL)        RETURN
    GO