create function fun_getnotedepose(@vNoteNme varchar(30),@vNoteNum varchar(17))
returns int
as 
begin
  declare @ int
  select @=f_zfbz from @vNoteNme where f_djhm=@vNoteNum
end-----------
才疏学浅,有没有其他的系统的存储过程可以替代
如果没有,有没有办法写成一条sql语句(如子查询形式的),要求这一条sql语句是查询一张表tablea,表tablea存储的是表名f_tablename,取出f_tablename后,再进行条件查询,说明白了就是二次表查询,其第一次是根据条件取得表名,第二次是在第一次的基础上再进行查询create tbalea
(
f_m varchar(30)
f_tablename varchar(30)
)
f_m     f_tablename
------- --------------
aaa     tbnote_cg
bbb     tbnote_xs
...     ...create tbnote_cg
(
f_djhm varchar(17)
f_zfbz int
)
f_djhm        f_zfbz
------------- ----------
aaa0001       0
aaa0002       1
...           ...
 create tbnote_xs
(
f_djhm varchar(17)
f_zfbz int
)
f_djhm        f_zfbz
------------- ----------
bbb0001       0
bbb0002       1
...           ...tbnote_的表还有很多,不确定的,格式都如上
现在告诉你bbb0001这样一个单号,要得到f_zfbz的值,如何办到,存储过程能办到,但有没有其他的办法,最好是函数形式,没有的话,能不能用一条sql查询语句办到,谢谢

解决方案 »

  1.   

    create proc test_p 
    @vNoteNme varchar(30),
    @vNoteNum varchar(17)
    as
    exec('select f_zfbz from '+@vNoteNme+' where f_djhm='''+@vNoteNum+'''')exec test_p 参数1,参数2
      

  2.   

    create proc test_p 
    @vNoteNme varchar(30),
    @vNoteNum varchar(17)
    as
    declare @ int,@sql nvarchar(1000)
    set @sql='select @a=f_zfbz from '+@vNoteNme+' where f_djhm='''+@vNoteNum+''''
    exec sp_executesql @sql,N'@a int output',@ output 
    select @
      

  3.   

    这个我已经熟得快烂了,我不需要存储过程,要函数形式,能够在sql语句中再调用
      

  4.   

    我知道'函数中不能使用动态SQL'所以问有没有替代办法!!!!!!!!!!!!!!!!!!!!!!!!!晕死了!!!!!!!!!!!!!!!!!!!!!!!
      

  5.   

    create procedure pro_getnotedepose(@vNoteNme varchar(30),@vNoteNum varchar(17),@Mark int output)
    as 
    begin
       select top 0 100 as f_zfbz into #tmp
      exec('insert into #tmp (f_zfbz) select top 1 f_zfbz  from '+@vNoteNme +' where f_djhm='''+@vNoteNum+'''')
      select * from #tmp
      select @Mark=(select top 1 f_zfbz from #tmp)
    enddeclare @Mark int
    exec pro_getnotedepose '表名','关键信息',@Mark output
    select @Mark
      

  6.   

    存储过程之间相互调用 
    if object_id('pro1') is not null
          drop proc pro1
    if object_id('pro2') is not null
          drop proc pro2
    if object_id('tbtest') is not null
          drop table tbtest
    GO
    create table tbtest(id int identity(1,1),name varchar(20))
    insert tbtest(name) 
    select 'x' union all
    select 'myname' union all
    select 'myname' union all
    select 'yourname' union all
    select 'myname'
    select * from tbtest
    GO
    ----创建存储过程1
    create proc pro1 @a varchar(16) = null,@returnvalue int=null output
    as
          select @returnvalue = max(id) from tbtest where name = @a
    GO
    ----创建存储过程2(在该存储过程中调用存储过程1)
    create proc pro2 @cmd nvarchar(4000)
    as
    declare @r int
          set @r = 0
          exec sp_executesql @cmd,N'@r int output',@r output
          select @r
    GO----调用存储过程2
    declare @cmd Nvarchar(4000)
    --set @cmd = 'exec pro1 ''myname'',@r output'
    set @cmd = 'exec pro1 @a=''myname'',@returnvalue=@r output'--效果同上一条语句
    exec pro2 @cmd----清除测试环境
    drop proc pro1,pro2
    drop table tbtest 需要注意的地方是@cmd声明成nvarchar(4000)--再举一例
    if object_id('prc11') is not null
          drop proc prc11
    goCREATE PROC PRC11(
    @a varchar(16)=null,
    @returnvalue int=null output
    )
    AS BEGIN
        SET @returnvalue = LEN(@A) + 2234
    END 
    godeclare @cmd Nvarchar(1000),@r int
    set @r = 0
    set @cmd = 'exec PRC11 @a=''myname11'',@returnvalue=@r output'
    exec sp_executesql @cmd ,N'@r int output',@r output
    SELECT @R
    drop proc prc11