这个触发器能写出来吗?

kataboy 2003-09-22 10:33:35
在SQL Server 2000中!
我是想,只要数据库中有表加入,我就在demo表中的counts字段加1。:
比如:只要以pp开头的表加入就在Demo表的Counts加1,要是ps开头的就不操作!
这个触发器怎么写啊!

注意:demo表结构就一个int类型的counts字段!

希望大家能帮我写一下!
以下是我写的一半!
create trigger dbo.AddCountToDemo on dbo.sysobjects
for delete,insert
as
declare @sql varchar(2000)

               --这里不知道怎么样写了。
update demo set counts=counts+1
...全文
34 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
kataboy 2003-09-30
  • 打赏
  • 举报
回复
今晚12点之前结帐!
CSDNM 2003-09-25
  • 打赏
  • 举报
回复
系统表不能加触发器,这是没有办法改变的,兄弟不是一定要在一棵歪脖子上吊死吧

增加或者修改表结构都会相应修改系统表,所以查询的结果总是最新的


CSDNM 2003-09-25
  • 打赏
  • 举报
回复
你把语句拷贝过去,在查询分析器试试。
CSDNM 2003-09-25
  • 打赏
  • 举报
回复
你只记录了三个表的数目在表里,这三个数据可以不用触发器来得到,我上面不是写了语句了吗?

三个一起得到:

SELECT pp_Counts=sum(case when NAME LIKE 'pp%' then 1 else 0 end),
xh_Counts=sum(case when NAME LIKE 'xh%' then 1 else 0 end),
yz_Counts=sum(case when NAME LIKE 'yz%' then 1 else 0 end)
FROM SYSOBJECTS
WHERE TYPE='U'


IT-司马青衫 2003-09-25
  • 打赏
  • 举报
回复
收藏先
kataboy 2003-09-24
  • 打赏
  • 举报
回复
create trigger ServerDB.AddCountToDemo on dbo.sysobjects
for insert
as
begin
declare @sql char(2)
select @sql=substring(name,1,2) from inserted where type='u'
if @sql='pp' --增加表
update manager_count set pp_count=pp_count+1
if @sql='xh'
update manager_count set xh_count=xh_count+1
if @sql='yz'
update manager_count set yz_count=yz_count+1
end

这是我改写的,但是不能创建!
kataboy 2003-09-24
  • 打赏
  • 举报
回复
兄弟,因为我要经常建立表的,所以我想建立一个表来管理我建立的表。
你说不用触发器,怎么办。我可不想在程序中写代码。
CSDNM 2003-09-24
  • 打赏
  • 举报
回复
OpenVMS(半知半解) 老兄也来了

系统表不能加触发器

这个问题我觉得可以不用触发器,甚至不用Demo表的Counts

需要这个Counts时查询:

SELECT Counts=COUNT(*) FROM SYSOBJECTS
WHERE TYPE='U'
AND NAME LIKE 'pp%'
OpenVMS 2003-09-24
  • 打赏
  • 举报
回复
A trigger cannot be created on a temporary or system table, although triggers can reference temporary tables. System tables should not be referenced.use the Information Schema Views instead.


you can retrieve information from it and store into your table.
FAICHEN 2003-09-24
  • 打赏
  • 举报
回复
gz
eWong2016 2003-09-23
  • 打赏
  • 举报
回复
关注 ,我没用过耶!
del77 2003-09-23
  • 打赏
  • 举报
回复
UP
kataboy 2003-09-23
  • 打赏
  • 举报
回复
To ljianq:
我改的代码如下:
create trigger ServerDB.AddCountToDemo on sysobjects
for insert
as
begin
declare @sql char(2)
select @sql=substring(name,1,2) from inserted where type='u'
if @sql='pp' --增加表
update manager_count set pp_count=pp_count+1
if @sql='xh'
update manager_count set xh_count=xh_count+1
if @sql='yz'
update manager_count set yz_count=yz_count+1
end

但是他老是说我的权限不够!
出错信息如下:
服务器: 消息 229,级别 14,状态 5,过程 AddCountToDemo,行 65535
拒绝了对对象 'sysobjects'(数据库 'ServerDB',所有者 'dbo')的 CREATE TRIGGER 权限。
我的这个用户已经是和sa一样的了,还是出错!
liuwl 2003-09-23
  • 打赏
  • 举报
回复
精神支持,哈哈。
kataboy 2003-09-23
  • 打赏
  • 举报
回复
谢谢楼上的兄弟关注本问题!
不过问题的关键还是没有解决呢!
我是想:只要以pp开头的表加入就在Demo表的Counts加1,要是其它开头的表就不操作!
ljianq 2003-09-23
  • 打赏
  • 举报
回复
create trigger dbo.AddCountToDemo on dbo.sysobjects
for insert
as
begin
declare @sql char(1)
select @sql=type from inserted
if @sql='u' --增加表
update demo set counts=counts+1
end

create trigger dbo.RemoveCountToDemo on dbo.sysobjects
for delete
as
begin
declare @sql char(1)
select @sql=type from deleted
if @sql='u' --减少表
update demo set counts=counts-1
end
flysharker 2003-09-23
  • 打赏
  • 举报
回复
只能帮你定了
kataboy 2003-09-23
  • 打赏
  • 举报
回复
也不行。
出错信息:
服务器: 消息 229,级别 14,状态 5,过程 AddCountToDemo,行 65535
拒绝了对对象 'sysobjects'(数据库 'ServerDB',所有者 'dbo')的 CREATE TRIGGER 权限。
kataboy 2003-09-23
  • 打赏
  • 举报
回复
也不行。
出错信息:
服务器: 消息 229,级别 14,状态 5,过程 AddCountToDemo,行 65535
拒绝了对对象 'sysobjects'(数据库 'ServerDB',所有者 'dbo')的 CREATE TRIGGER 权限。
gfh21cn 2003-09-23
  • 打赏
  • 举报
回复
加个DBO.呢

create trigger ServerDB.AddCountToDemo on dbo.sysobjects
for insert
as
begin
declare @sql char(2)
select @sql=substring(name,1,2) from inserted where type='u'
if @sql='pp' --增加表
update manager_count set pp_count=pp_count+1
if @sql='xh'
update manager_count set xh_count=xh_count+1
if @sql='yz'
update manager_count set yz_count=yz_count+1
end
加载更多回复(2)

1,178

社区成员

发帖
与我相关
我的任务
社区描述
C++ Builder 数据库及相关技术
社区管理员
  • 数据库及相关技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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