Sql Server 触发器问题

「已注销」 2008-11-07 02:28:36
CREATE TRIGGER TRIG_COP_INFO ON [FAQ].[Cop_info] 
FOR INSERT, UPDATE, DELETE
AS

--when Inserting
IF INSERT(COP_INFO)
BEGIN
SELECT I.*,'INSERT',GETDATE() INTO COP_INFO_HISTROY FROM INSERTED I
END

--when updating
IF UPDATE(COP_INFO)
BEGIN
SELECT D.*,'UPDATE',GETDATE() INTO COP_INFO_HISTROY FROM DELETED D
END

--when deleting
IF DELETE(COP_INFO)
BEGIN
SELECT D.*,'DELETE',GETDATE() INTO COP_INFO_HISTROY FROM DELETED D
END



错误信息如下:
服务器: 消息 156,级别 15,状态 1,过程 TRIG_COP_INFO,行 6
在关键字 'INSERT' 附近有语法错误。
服务器: 消息 156,级别 15,状态 1,过程 TRIG_COP_INFO,行 18
在关键字 'DELETE' 附近有语法错误。
我哪里错了?
...全文
64 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2008-11-07
  • 打赏
  • 举报
回复
怎么select into table A怎么只能使用一次,也就是只能插入一次??
「已注销」 2008-11-07
  • 打赏
  • 举报
回复
谢谢,楼上的各位高手。真的谢谢大家,一直在用Oracle,对Sql server不太熟悉,谢谢大家
Yang_ 2008-11-07
  • 打赏
  • 举报
回复
是什么操作应该如上判断
可能可以优化(少判断两次)

--when Inserting
IF not exists (select 1 from deleted)
BEGIN
SELECT I.*,'INSERT',GETDATE() INTO COP_INFO_HISTROY FROM INSERTED I
END
--when deleting
else
IF not exists (select 1 from inserted)
BEGIN
SELECT D.*,'DELETE',GETDATE() INTO COP_INFO_HISTROY FROM DELETED D
END
else
--when updating
BEGIN
SELECT D.*,'UPDATE',GETDATE() INTO COP_INFO_HISTROY FROM DELETED D
END
hyde100 2008-11-07
  • 打赏
  • 举报
回复
可以建三个触发器来代替
CREATE TRIGGER TRIG_COP_INTO ON [FAQ].[Cop_info] 
FOR INSERT

CREATE TRIGGER TRIG_COP_UP ON [FAQ].[Cop_info]
FOR UPDATE

CREATE TRIGGER TRIG_COP_DE ON [FAQ].[Cop_info]
FOR DELETE
LCAAA 2008-11-07
  • 打赏
  • 举报
回复
更新、插入、删除的语句不对。自己再检查一下。建议看一些基础的书籍。。
水族杰纶 2008-11-07
  • 打赏
  • 举报
回复
只有IF UPDATE(COL)
Yang_ 2008-11-07
  • 打赏
  • 举报
回复
CREATE TRIGGER TRIG_COP_INFO ON [FAQ].[Cop_info] 
FOR INSERT, UPDATE, DELETE
AS

--when Inserting
IF not exists (select 1 from deleted)
BEGIN
SELECT I.*,'INSERT',GETDATE() INTO COP_INFO_HISTROY FROM INSERTED I
END

--when updating
IF exists (select 1 from deleted) and exists (select 1 from inserted)
BEGIN
SELECT D.*,'UPDATE',GETDATE() INTO COP_INFO_HISTROY FROM DELETED D
END

--when deleting
IF not exists (select 1 from inserted)
BEGIN
SELECT D.*,'DELETE',GETDATE() INTO COP_INFO_HISTROY FROM DELETED D
END
hyde100 2008-11-07
  • 打赏
  • 举报
回复
IF INSERT(COP_INFO)
IF DELETE(COP_INFO)
好像没有这种用法
liangCK 2008-11-07
  • 打赏
  • 举报
回复
没有IF INSERT/ IF DELETE的..

34,837

社区成员

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

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