奇怪的问题:SQL语句可以触发,企业管理器为什么不行?

wooden954 2010-10-14 03:31:56
SQL2000中,通过两张表建立的视图,在视图上写Instead of类型的插入或更新触发器,语法没有错误,但是当我在查询分析器中写插入或更新记录的SQL语句时,触发器能够顺利执行,但是当我在企业管理器中打开这个视图后进行编辑,插入触发器能够被执行,但是Update触发器却没有被执行,奇怪中....

问题:
如果我要在视图上更新并且需要对引用的表也同时更新的话,如何办???


创建表或视图的语句如下:

1.创建学生表
CREATE TABLE [Student] (
[ID] [bigint] IDENTITY (1, 1) NOT NULL ,
[Name] [char] (10) COLLATE Chinese_PRC_CI_AS NULL ,
CONSTRAINT [PK_Student] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO


2.创建成绩表
CREATE TABLE [Score] (
[ID] [bigint] IDENTITY (1, 1) NOT NULL ,
[Score] [int] NULL ,
[Subject] [varchar] (50) COLLATE Chinese_PRC_CI_AS NULL ,
[StudentID] [bigint] NULL ,
CONSTRAINT [PK_Score] PRIMARY KEY CLUSTERED
(
[ID]
) ON [PRIMARY]
) ON [PRIMARY]
GO


3.创建关联视图

Create View StuScore
as
Select Student.Name,Score.Score,Score.Subject from Score,Student
where
Score.StudentID=Student.id


4.创建在视图上的插入触发器
Create trigger InsTriStuScore on StuScore Instead of Insert
as
begin
Insert into Student (Name) Values ('kkk')
end;


5.创建在视图上的更新触发器
Create trigger UpdTriStuScore on StuScore Instead of Update
as
begin
Insert into Student (Name) Values ('kkk')
end;


6.测试数据

Insert into Student (Name) Values ('张三')
Insert into Student (Name) Values ('李四')


Insert into Student (StudentID,Subject,Score) Values (1,'英语',10)
Insert into Student (StudentID,Subject,Score) Values (1,'历史',20)
Insert into Student (StudentID,Subject,Score) Values (2,'英语',11)
Insert into Student (StudentID,Subject,Score) Values (2,'历史',22)




...全文
148 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wooden954 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 sqlcenter 的回复:]
SSMS/查询分析器测试过,触发器没问题,update/insert都没有问题。
[/Quote]
查询分析器我这里也没有问题!
wooden954 2010-10-14
  • 打赏
  • 举报
回复
自己解决了!
解决过程比较简单:只需要在创建视图的时候加一选项 With VIEW_METADATA,之后触发器就可以正常触发了.
但仍不知道所以然!

各位达人有知道的,不防讲讲大家学习学习!
wooden954 2010-10-14
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 hovy_yang 的回复:]
楼主头像看了让我笑
[/Quote]
呵呵,这是我家儿子哭得比较经典的一张哈!
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
SSMS/查询分析器测试过,触发器没问题,update/insert都没有问题。
hovy_yang 2010-10-14
  • 打赏
  • 举报
回复
楼主头像看了让我笑
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
跟踪一下,看看update时有没有禁用触发器相关的语句。
wooden954 2010-10-14
  • 打赏
  • 举报
回复
问题不仅仅是在企业管理器中,Delphi数据库组件在编辑时的现象和企业管理器是一样的,我认为可能是我的触发器在应用过程中写法不正确造成的
SQLCenter 2010-10-14
  • 打赏
  • 举报
回复
bug
企业管理器太多bug
wooden954 2010-10-14
  • 打赏
  • 举报
回复
补充:在企业管理器中,更新数据后,仍然能够更新原始表,只是没有按我的触发器的意愿更新而已.
比如我在视图中对学生姓名更新之后,会发现学生表中的学生姓名被更新了,但是我的意愿是再新建一个
学生记录,而不是在原来的基础上修改学生姓名

27,580

社区成员

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

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