下面触发器在SQL2008里面执行后生效,在SQL2000里面执行不生效,不知道什么原因

fx290318458 2012-05-03 09:39:28
create trigger up_SEOutStock on SEOutStock
for insert
as
set nocount on
if exists(
select 1
from inserted c
join seoutstockentry d
on c.finterid=d.finterid
join (
select fitemid,sum(fqty) 库存数量
from ICInventory
group by fitemid) e
on d.fitemid=e.fitemid
where d.fqty>e.库存数量)
begin
declare @s varchar(1000)
select @s=isnull(@s+',','')+f.fnumber
from inserted c
join seoutstockentry d
on c.finterid=d.finterid
join (
select fitemid,sum(fqty) 库存数量
from ICInventory
group by fitemid) e
on d.fitemid=e.fitemid
join t_icitem f
on d.fitemid=f.fitemid
where d.fqty>e.库存数量
exec('raiserror(''物料代码为 '+@s+' 超出库存数,单据不允许保存!'',18,1)')
rollback tran
end
set nocount off
go
...全文
205 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
Andy-W 2012-05-03
  • 打赏
  • 举报
回复
最好是在查询分析器上,改用存储过程来调试,根据实际的数据,一步一步的检查各个子过程和条件是否满足。

在触发器里面慎用rollback,不同的SQL Server版本,可能会有不同。
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

能创建成功。
[/Quote]

触发器执不执行需要看你是否进对表行了定义的时候的触发操作,如果没进行那些操作,肯定是不执行的
fx290318458 2012-05-03
  • 打赏
  • 举报
回复
能创建成功。
黄_瓜 2012-05-03
  • 打赏
  • 举报
回复
你有的只是select 没有update 或者insert 或者delete 当然让你感觉不到他执行了
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

SQL code

create trigger up_SEOutStock on SEOutStock
for insert
as
set nocount on
if exists(
select 1
from inserted c
join seoutstockentry d
on c.finterid=d.finterid
join ……
[/Quote]

能创建成功吗?能的话没执行很可能就是你根本没触发触发器。
fx290318458 2012-05-03
  • 打赏
  • 举报
回复
去掉了,还是一样,触发器在2000
没有执行,在sql2008执行
  • 打赏
  • 举报
回复

create trigger up_SEOutStock on SEOutStock
for insert
as
set nocount on
if exists(
select 1
from inserted c
join seoutstockentry d
on c.finterid=d.finterid
join (
select fitemid,sum(fqty) 库存数量
from ICInventory
group by fitemid) e
on d.fitemid=e.fitemid
where d.fqty>e.库存数量)
begin
declare @s varchar(1000)
select @s=isnull(@s+',','')+f.fnumber
from inserted c
join seoutstockentry d
on c.finterid=d.finterid
join (
select fitemid,sum(fqty) 库存数量
from ICInventory
group by fitemid) e
on d.fitemid=e.fitemid
join t_icitem f
on d.fitemid=f.fitemid
where d.fqty>e.库存数量
exec('raiserror(''物料代码为 '+@s+' 超出库存数,单据不允许保存!'',18,1)')
--rollback tran 不知你这句是何意思,事物?但是没看见你事物的开始,要么去掉,要么加开始
end
set nocount off
go
十三门徒 2012-05-03
  • 打赏
  • 举报
回复
没有开启事务,干嘛要回滚呢
黄_瓜 2012-05-03
  • 打赏
  • 举报
回复
后面的rollback tran 删除了。。。。
小飛不想飛 2012-05-03
  • 打赏
  • 举报
回复
既然能創建成功但是還不能執行,我覺得有可能是一下幾點問題:
1.如8樓大蝦所說,你沒有對數據進行觸發操作。
2.SQL2008與SQL2000的版本不同,導致語句無法執行。(我以前也遇到過,可能性也最大)
如下文章介紹SQL2000、2005、2008的區別
http://blog.csdn.net/eteck/article/details/2907089

27,580

社区成员

发帖
与我相关
我的任务
社区描述
MS-SQL Server 应用实例
社区管理员
  • 应用实例社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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