蚂蚁或大力,快!急!

jimmyxing 2003-03-26 12:35:13
我建立一个触发齐,利用游标来更新数据库表中的数据;因为定义游标记录集的时候要利用到参数来控制选择的范围,所以造成不能错误!Read-Only游标上不能定义Update!

程序代码:

Create Trigger AddContainerTrigger
On DepotPosition
For INSERT
As
Declare @Row int,@Layer int,@Area varchar(20),@Col int,@Serial int

Select @Area=AreaCode,@Layer=LayerCode,@Row=RowCode,@Col=ColCode
From Inserted

Declare AddContainer Cursor
For
select OutSerial from DepotPosition where RowCode<@Row and AreaCode=@Area and ColCode=@Col
For update

open AddContainer
Fetch next from AddContainer into @Serial
while(@@fetch_Status=0)
begin
update DepotPosition set OutSerial=@Serial+1
where current of AddContainer
Fetch next from AddContainer into @Serial
end
Close AddContainer
Deallocate AddContainer
select OutSerial from DepotPosition
...全文
10 点赞 收藏 11
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
pengdali 2003-03-26
结构?部分数据?
回复
pengdali 2003-03-26
你的触发器这样写是不行的!
insert DepotPosition select '数据1' union all select '数据2'
也就是一次插入两条的话,就会出错!你为什么要这么做,说出你的需求
回复
jimmyxing 2003-03-26
我要解决的问题是这样:

就象堆积木,以它的截面来说,建立一个坐标,我每次只能取出行最大,层最大的那个,假设有个出来的序列,那后面的出来的序列就会依次减一,放上去的时候就依次加一,如此产生该问题。
回复
jimmyxing 2003-03-26
试过不行,问题主要出现在
select OutSerial from DepotPosition where RowCode<@Row and AreaCode=@Area and ColCode=@Col
如果不带参数是可以的,带了参数就不行,参数是从inserted中取出来的。
回复
pengdali 2003-03-26
你的触发器一次插入多条记录就玩完了!
回复
CrazyFor 2003-03-26
Create Trigger AddContainerTrigger
On DepotPosition
For INSERT
As
Declare @Row int,@Layer int,@Area varchar(20),@Col int,@Serial int

Select @Area=AreaCode,@Layer=LayerCode,@Row=RowCode,@Col=ColCode
From Inserted

Declare AddContainer Cursor
For
select OutSerial from DepotPosition where RowCode<@Row and AreaCode=@Area and ColCode=@Col
For update .....--这里跟上要修改的字段名。
回复
jimmyxing 2003-03-26
你的方法我看了,没有理解我的意思,我的想法是想实现象堆栈的那种算法,push一个下面的依次加1,pop一个依次减1,而顶始终为1!
回复
jimmyxing 2003-03-26
绕了一圈,我知道问题出在哪里,就是声明可以修改的游标的时候,

如果Select 语句中where条件后需要用到参数来限制选择范围的时候,如何实现?

我在测试的时候提示就是不能在Read-Only游标中指定Update!


你说的办法可以,现就技术而言,我想知道

上面的问题是否可以解决呢?
回复
pengdali 2003-03-26
CREATE TRIGGER AddContainerTrigger on DepotPosition
INSTEAD OF INSERT
AS
INSERT 表 (AreaCode,LayerCode,RowCode,ColCod,OutSerial) SELECT AreaCode,LayerCode,RowCode,ColCode,(select isnull(max(OutSerial),0)+1 from DepotPosition) FROM inserted


??
回复
jimmyxing 2003-03-26
绕了一圈,我知道问题出在哪里,就是声明可以修改的游标的时候,

如果Select 语句中where条件后需要用到参数来限制选择范围的时候,如何实现?

我在测试的时候提示就是不能在Read-Only游标中指定Update!
回复
jimmyxing 2003-03-26
DepotPosition表:
PositionOID AreaCode LayerCode RowCode ColCode OutSerial(取出序列)

int(PK) varchar(20) int int int int

1 test 1 1 1 1
2 test 1 2 1 2
3 test 2 1 1 3
4 test 2 2 1 4

当我插入一条记录test 1(层) 3(行) 1(列) --->它的序列值为 1,的时候,我要实现将OutSerial的值依次加1.
回复
相关推荐
发帖
疑难问题
创建于2007-09-28

2.1w+

社区成员

MS-SQL Server 疑难问题
申请成为版主
帖子事件
创建了帖子
2003-03-26 12:35
社区公告
暂无公告