在线征答

WHHS027 2004-04-15 08:11:10
CREATE TRIGGER Storagerecord_insert_update
ON Stockrecord
FOR INSERT
AS
IF exists (select s.GOODSID
FROM Storagerecord s JOIN inserted i
ON s.GOODID=i.GOODID)
BEGIN
UPDATE s SET s.NUMBER=s.NUMBER+i.NUMBER
FROM Storagerecord s INNER JOIN inserted i
END
ELSE
BEGIN
UPDATE s SET s.GOOGID=i.GOODID
UPDATE s SET s.NUMBER=i.NUMBER
FROM Storagerecord s INNER JOIN inserted i
END

Storagerecord 为库存表,stockrecord 为入货记录表

请问这个触发器有没有问题?若有,请指出?谢谢!
...全文
80 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
zjcxc 元老 2004-04-15
  • 打赏
  • 举报
回复
检查你的表中有没有这个字段才行啊,你这样问我我怎么答? 数据库在你手上.

错误提示很明白,没有列: GOODID
检查这两个表:Stockrecord,Storagerecord
WHHS027 2004-04-15
  • 打赏
  • 举报
回复
TO zjcxc
知道了,谢谢!
WHHS027 2004-04-15
  • 打赏
  • 举报
回复
TO zjcxc
消息提示:
服务器: 消息 207,级别 16,状态 3,过程 Storagerecord_insert_update,行 5
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 5
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 9
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 9
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 15
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 15
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 15
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 15
列名 'GOODID' 无效。
服务器: 消息 207,级别 16,状态 1,过程 Storagerecord_insert_update,行 15
列名 'GOODID' 无效。

这是怎么回事啊?为什么会有这样的提示呢?
WHHS027 2004-04-15
  • 打赏
  • 举报
回复

Stockrecord 表一个字母都没有错
zjcxc 元老 2004-04-15
  • 打赏
  • 举报
回复
CREATE TRIGGER Storagerecord_insert_update
ON Stockrecord --你的数据库中有这个表吗?不然不会报这个错,检查一下有没有写错
FOR INSERT
AS
IF exists (select s.GOODSID
FROM Storagerecord s JOIN inserted i
ON s.GOODID=i.GOODID)
BEGIN
UPDATE s SET s.NUMBER=s.NUMBER+i.NUMBER
FROM Storagerecord s INNER JOIN inserted i
on s.GOODID=i.GOODID
END
ELSE
BEGIN
insert Storagerecord(GOODID,NUMBER)
select i.GOODID,i.NUMBER
from inserted i left join Storagerecord s
on s.GOODID=i.GOODID
where s.GOODID is null
END
WHHS027 2004-04-15
  • 打赏
  • 举报
回复
CREATE TRIGGER Storagerecord_insert_update
ON Stockrecord
FOR INSERT
AS
IF exists (select s.GOODSID
FROM Storagerecord s JOIN inserted i
ON s.GOODID=i.GOODID)
BEGIN
UPDATE s SET s.NUMBER=s.NUMBER+i.NUMBER
FROM Storagerecord s INNER JOIN inserted i
on s.GOODID=i.GOODID
END
ELSE
BEGIN
insert Storagerecord(GOODID,NUMBER)
select i.GOODID,i.NUMBER
from inserted i left join Storagerecord s
on s.GOODID=i.GOODID
where s.GOODID is null
END



这个触发器提示:
服务器: 消息 208,级别 16,状态 4,过程 Storagerecord_insert_update,行 1
对象名 'Stockrecord' 无效。
TO zjcxc
这是什么原因啊?我好像老遇到类似的问题
WHHS027 2004-04-15
  • 打赏
  • 举报
回复
我知道,谢谢你!
你好像对这很熟,有机会多多请教你,望你不吝赐教!
zjcxc 元老 2004-04-15
  • 打赏
  • 举报
回复
你的功能需求不说,我不是超人,不可能想得到你要实现什么功能,所以只能改错.
zjcxc 元老 2004-04-15
  • 打赏
  • 举报
回复
CREATE TRIGGER Storagerecord_insert_update
ON Stockrecord
FOR INSERT
AS
--更新已经存在的
UPDATE s SET s.NUMBER=s.NUMBER+i.NUMBER
FROM Storagerecord s INNER JOIN inserted i
on s.GOODID=i.GOODID

--插入未有的
insert Storagerecord(GOODID,NUMBER)
select i.GOODID,i.NUMBER
from inserted i left join Storagerecord s
on s.GOODID=i.GOODID
where s.GOODID is null
zjcxc 元老 2004-04-15
  • 打赏
  • 举报
回复
那是你没说清楚,我只是负责改错.
WHHS027 2004-04-15
  • 打赏
  • 举报
回复
TO zjcxc
问题是这样的,入货时如果库存有该商品只需修改库存数量就行,如果没有应该就要插入新的商品编号和库存数量了。
你说的那好像也不行,你认为呢?
WHHS027 2004-04-15
  • 打赏
  • 举报
回复
加了也是一样的有问题,请再指出,谢谢!
zjcxc 元老 2004-04-15
  • 打赏
  • 举报
回复
CREATE TRIGGER Storagerecord_insert_update
ON Stockrecord
FOR INSERT
AS
IF exists (select s.GOODSID
FROM Storagerecord s JOIN inserted i
ON s.GOODID=i.GOODID)
BEGIN
UPDATE s SET s.NUMBER=s.NUMBER+i.NUMBER
FROM Storagerecord s INNER JOIN inserted i
on s.GOODID=i.GOODID --少了关联条件
END
ELSE
BEGIN
-- UPDATE s SET s.GOOGID=i.GOODID --这句应该是多余的
UPDATE s SET s.NUMBER=i.NUMBER
FROM Storagerecord s INNER JOIN inserted i
on s.GOODID=i.GOODID --少了关联条件

END
leeboyan 2004-04-15
  • 打赏
  • 举报
回复
两个inner join后少条件,假设加on s.id=i.id:

CREATE TRIGGER Storagerecord_insert_update
ON Stockrecord
FOR INSERT
AS
IF exists (select s.GOODSID
FROM Storagerecord s JOIN inserted i
ON s.GOODID=i.GOODID)

BEGIN
UPDATE s SET s.NUMBER=s.NUMBER+i.NUMBER
FROM Storagerecord s INNER JOIN inserted i on s.id=i.id
END

ELSE
BEGIN
UPDATE s SET s.GOOGID=i.GOODID
UPDATE s SET s.NUMBER=i.NUMBER
FROM Storagerecord s INNER JOIN inserted i on s.id=i.id
END

34,872

社区成员

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

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