日期:2014-05-18  浏览次数:20614 次

有没有替代的办法
create   function   fun_getnotedepose(@vNoteNme   varchar(30),@vNoteNum   varchar(17))
returns   int
as  
begin
    declare   @mark   int
    select   @mark=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查询语句办到,谢谢

------解决方案--------------------
create proc test_p
@vNoteNme varchar(30),
@vNoteNum varchar(17)
as
declare @mark int,@sql nvarchar(1000)
set @sql= 'select @a=f_zfbz from '+@vNoteNme+ ' where f_djhm= ' ' '+@vNoteNum+ ' ' ' '
exec sp_executesql @sql,N '@a int output ',@mark output
select @mark
------解决方案--------------------
批处理就是好
学习
------解决方案--------------------
函数中不能使用动态SQL
------解决方案--------------------
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)
end

declare @Mark int
exec pro_getnotedepose '表名 ', '关键信息 ',@Mark output
select @Mark
------解决方案--------------------
存储过程之间相互调用
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