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查询语句办到,谢谢
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查询语句办到,谢谢
@vNoteNme varchar(30),
@vNoteNum varchar(17)
as
exec('select f_zfbz from '+@vNoteNme+' where f_djhm='''+@vNoteNum+'''')exec test_p 参数1,参数2
@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 @
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
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