读书人

有没有替代的办法解决思路

发布时间: 2012-03-17 19:06:27 作者: rapoo

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


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
go

CREATE PROC PRC11(
@a varchar(16)=null,
@returnvalue int=null output
)
AS BEGIN
SET @returnvalue = LEN(@A) + 2234
END
go

declare @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


[解决办法]
没有,就用你的这个函数吧

读书人网 >SQL Server

热点推荐