蚂蚁或大力,快!急!

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
...全文
74 11 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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.

22,300

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 疑难问题
社区管理员
  • 疑难问题社区
  • 尘觉
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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