21 一个SQLServer的自定义函数中调用一个自定义的存储过程,执行此函数后发出如下提示:“只有函数和扩展存储过程才能从函数内部执行"。
原因:函数只能使用简单的sql语句,逻辑控制语句,复杂一点的存储过程是不能调用的,在函数里也不能使用execute sp_executesql 或者execute 。解决方法把函数改为存储过程,然后在另一个存储过程中象调用函数一样使用此存储过程就可以了。
下面是一个存储过程调用另一个存储过程的实例,有参数传递的。
--存储过程sp_B
create proc sp_B
@A int ,
@B int ,
@C int output
AS
set @C = @A + @B
go
--存储过程p_A
create proc sp_A
@A int ,
@B int
as
declare @C int
exec sp_B @A , @B , @C output
print @C
go
--测试
exec sp_A 3 , 5
22. 怎样执行带参数的SQL语句,比如说字段是一个参数,如何写存储过程?实例如下:
Create proc [dbo].[jsxs]
(
@zb varchar(5),
@nr varchar(4),
@ID int,
@shu int output
)
AS
BEGIN
declare @sqls nvarchar(1000)--注意此类型
if @nr='A'
set @zb=@zb+'1'
if @nr='B'
set @zb=@zb+'2'
if @nr='C'
set @zb=@zb+'3'
if @nr='D'
set @zb=@zb+'4'
if @nr='E'
set @zb=@zb+'5'
----------------------------------主题部分------------------------------------
set @sqls='select @a=' +@zb + ' from shumu where peID=' +cast(@ID as char)
exec sp_executesql
@sqls,
N'@a int output',@shu output
END
原因:函数只能使用简单的sql语句,逻辑控制语句,复杂一点的存储过程是不能调用的,在函数里也不能使用execute sp_executesql 或者execute 。解决方法把函数改为存储过程,然后在另一个存储过程中象调用函数一样使用此存储过程就可以了。
下面是一个存储过程调用另一个存储过程的实例,有参数传递的。
--存储过程sp_B
create proc sp_B
@A int ,
@B int ,
@C int output
AS
set @C = @A + @B
go
--存储过程p_A
create proc sp_A
@A int ,
@B int
as
declare @C int
exec sp_B @A , @B , @C output
print @C
go
--测试
exec sp_A 3 , 5
22. 怎样执行带参数的SQL语句,比如说字段是一个参数,如何写存储过程?实例如下:
Create proc [dbo].[jsxs]
(
@zb varchar(5),
@nr varchar(4),
@ID int,
@shu int output
)
AS
BEGIN
declare @sqls nvarchar(1000)--注意此类型
if @nr='A'
set @zb=@zb+'1'
if @nr='B'
set @zb=@zb+'2'
if @nr='C'
set @zb=@zb+'3'
if @nr='D'
set @zb=@zb+'4'
if @nr='E'
set @zb=@zb+'5'
----------------------------------主题部分------------------------------------
set @sqls='select @a=' +@zb + ' from shumu where peID=' +cast(@ID as char)
exec sp_executesql
@sqls,
N'@a int output',@shu output
END