SQL Server触发器问题,语句有问题

--选课表CREATETABLESC(Snochar(10)NOTNULL,Cnochar(10)NOTNULL,SCfalgbit,Sgradesmallint,Snu... --选课表
CREATE TABLE SC
(
Sno char(10) NOT NULL,
Cno char(10) NOT NULL,
SCfalg bit,
Sgrade smallint,
Snumber smallint,
PRIMARY KEY(Sno, Cno),
FOREIGN KEY(Sno) REFERENCES Student(Sno),
FOREIGN KEY(Cno) REFERENCES Course(Cno)
);

--创建一个触发器,当在选课表SC中插入相应课程号的记录时
--把选该课的学生人数加1
GO
CREATE TRIGGER Insert_SC ON SC
FOR INSERT
AS BEGIN
IF (new.Cno = old.Cno) THEN
new.Snumber = old.Snumber + 1;
END IF;
END;

消息 156,级别 15,状态 1,过程 Insert_SC,第 4 行
关键字 'THEN' 附近有语法错误。
用的SQL Server 2005
展开
 我来答
匿名用户
2012-05-20
展开全部
你以前一直用Oracle数据库吧,SQL Server的触发器和Oracle的差别还是比较大的,MSsql中没有:new.…或:old.…的用法,inserted指的是更新或插入的数据,deleted指的是被修改或删除的数据。MSsql中的IF语句不是“IF THEN END IF”而是“IF begin end”的模式。并且各句末尾不需要加分号。
CREATE TRIGGER Insert_SC ON SC
FOR INSERT
declare @oldcno 类型,@newcno 类型,@newsnum 类型,@oldsnum 类型;
AS
BEGIN
select @oldcno=Cno from deleted
select @newcno=Cno from inserted
select @oldsnum=Snumber from deleted
IF (@oldcno= @newcno)
begin
@newsnum= @oldsnum+ 1;
update SC set Snumber =@newsnum where 唯一标识你正在操作的行;
end
END;
以上写的这个并不能直接供你使用,你还需要琢磨下修改后才能使用。
百度网友bfb9204
2012-05-13 · TA获得超过718个赞
知道小有建树答主
回答量:1008
采纳率:66%
帮助的人:449万
展开全部
你的数据库是那个版本的?
还有就是 new.Snumber = old.Snumber + 1; 没有UPDATE 怎么实现+1的
if 后面不用加then
追问
GO
CREATE TRIGGER Insert_SC ON SC
FOR INSERT
AS BEGIN
IF (new.Cno = old.Cno)
UPDATE SC SET new.Snumber = old.Snumber + 1;
END IF;
END;

消息 102,级别 15,状态 1,过程 Insert_SC,第 6 行
';' 附近有语法错误。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式