日期:2014-05-17  浏览次数:20759 次

数据库函数.怎么update 到表中去

ALTER function genJONO(@X varchar(10),@R int)
returns nvarchar(10)
as 
begin
--DECLARE @X NVARCHAR(10)
--SET @X = 'A0000009'
DECLARE @Y nvarchar(10)
declare @i int
DECLARE @Z int
DECLARE @N INT
select @N=JO from BO_JO where BINDID=@R

if(@X='A') begin
select @i=isnull(max(JO),100000) from BO_JO where JOLEX='A' and BINDID!=@R
end else if(@X='B') begin
select @i=isnull(max(JO),100000) from BO_JO where JOLEX='B' and BINDID!=@R
end else if(@X='D') begin
select @i=isnull(max(JO),100000) from BO_JO where  JOLEX='D' and BINDID!=@R
end else begin 
return 0000 
end  
if(@N=0 or @i=100000 or @N=100000)begin 
if(@i=100000) 
begin 
set @N = @i+1 
return @N
end else if(LEN(@i)<5)
begin  
set @N=100000+@i 
return @N
end else begin
set @N =@i+1
return @N
end 
end  else begin
set @N=@N end
----这个部分有问题帮忙解决下.怎么处理
update BO_JO set JO=@N where BINDID=@R
---
return @N
end
------最佳解决方案--------------------
自定义函数里面不能update ,存储过程可以。
------其他解决方案--------------------
简单的update。没 看出问题
------其他解决方案--------------------
在update之前先print出来看看@N、@R这两个参数是否有值,再做具体的分析
------其他解决方案--------------------
引用:
在update之前先print出来看看@N、@R这两个参数是否有值,再做具体的分析


我的意思是在函数里面使用update 语句..数据库提示错误.我需要怎么才能在函数里面使用update语句
------其他解决方案--------------------
这个貌似没必要非要在函数里面做吧。我反正没试过在函数里面实现update的。一般都是查值。
------其他解决方案--------------------
自定义函数和存储过程的定位是不一样的,自定义函数主要用于数据的计算,只能控制函数内部定义的局部变量,包括游标和表,都必须在函数内部定义才能使用,对外部数据库作出的任何永久性修改,都是禁止的。

具体来说,不能在函数中执行的操作包括:对数据库表的修改,对不在函数上的局部游标进行操作,发送电子邮件,尝试修改目录,以及生成返回至用户的结果集。