有没有替代的办法
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