to 邹健:函数中不允许调用Update ?函数中不允许调用存储过程?那以下功能怎么实现呢?

DataBind 2005-01-04 03:28:03
基础数据如下:
create table Tb_Sequence
(
TableName nvarchar(50) not null,
Sequence int not null

)

insert into Tb_Sequence(TableName,Sequence) values('Tb_DataBackLog',0)

我希望创建一个函数,用来取出下一个Sequence(以后算法可能不是简单的加一这样)值,并记录到表中。

希望不存在并发操作问题。
一定要用函数,以便在普通sql 语句中好使用,这个大约是主键了。


我初步设想如下:

CREATE FUNCTION [dbo].[GetSequence] (@TableName nvarchar(100))
RETURNS int AS
BEGIN
declare @NewSequence int
update tb_sequence set Sequence = Sequence + 1,@NewSequence = Sequence + 1 where TableName like @TableName
return (@NewSequence)

END

但是:Invalid use of 'UPDATE' within a function.

我又尝试:
CREATE PROCEDURE [dbo].[Proc_GetSequence]
@TableName nvarchar(100),
@NewSequence int output
AS
begin
update tb_sequence set Sequence = Sequence + 1,@NewSequence = Sequence + 1 where TableName like @TableName
end

CREATE FUNCTION [dbo].[Func_GetSequence] (@TableName nvarchar(100))
RETURNS int AS
BEGIN
declare @NewSequence int
execute Proc_GetSequence @TableName,@NewSequence = @NewSequence output
return (@NewSequence)

END

select dbo.Func_GetSequence('Tb_DataBackLog')

可是:Only functions and extended stored procedures can be executed from within a function.

我该怎么做呢?
...全文
108 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
DataBind 2005-01-04
  • 打赏
  • 举报
回复
不想用除法器,有用函数解决的方法吗?
我想用一个表+函数,把所有的表的主键都管理起来。如果用触发器,就得创建很多,乱七八糟的。
631799 2005-01-04
  • 打赏
  • 举报
回复
存储过程+触发器解决
CREATE PROCEDURE [dbo].[Proc_GetSequence]
@TableName nvarchar(100),
@NewSequence int output
AS
begin
update tb_sequence set Sequence = Sequence + 1,@NewSequence = Sequence + 1 where TableName like @TableName
end


create trigger tr_a on tb_sequence for update as

。。。
DataBind 2005-01-04
  • 打赏
  • 举报
回复
用函数有什么解决方法吗?
lsxaa 2005-01-04
  • 打赏
  • 举报
回复
这个动态语句,好象只能用存储过程来做了

lxysjl 2005-01-04
  • 打赏
  • 举报
回复
MARK,我顶

34,575

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server相关内容讨论专区
社区管理员
  • 基础类社区
  • 二月十六
  • 卖水果的net
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧