insert 触发器求解

hcl_encoding 2019-01-10 04:16:37
现在有表A和表B,表A中有字段NO(主键),USERNAME,TABNAME,MESSAGE,STATUS,表B中也有USERNAME,TABNAME,这两个字段,
现在往表A中插入数据时,要判断表A的USERNAME,TABNAME字段值在表B中是否存在,如果不存在就将表A的MESSAGE值改为null,STATUS值改为-2
...全文
145 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_39007465 2019-01-14
  • 打赏
  • 举报
回复
create trigger tri_insert on a
for insert
as

update a
set message=null,status=-2
from a join inserted b on a.no=b.no
where not exists(select * from b join inserted on b.username=inserted.USERNAME and b.TABNAME=insert.TABNAME)

应该是这么实现的了
Dear SQL(燊) 2019-01-14
  • 打赏
  • 举报
回复
create trigger tri_a_insert on a
after insert
as

update a set [MESSAGE]=null,[STATUS]=-2
from a
inner join inserted c on a.[no]=c.[no]
left join b on a.USERNAME=b.USERNAME and a.TABNAME=b.TABNAME
where b.TABNAME is null /*这种写法b表中的TABNAME不可为空 */
二月十六 版主 2019-01-11
  • 打赏
  • 举报
回复
引用 3 楼 qq_41263196 的回复:
大神,我照着这样弄了不行啊
额,你这么说我怎么帮你?你说不行,我不知道为啥不行,是哪一步出了问题,那我只能回复你。 你写错了,再检查一下就可以了。
hcl_encoding 2019-01-11
  • 打赏
  • 举报
回复
大神,我照着这样弄了不行啊
二月十六 版主 2019-01-10
  • 打赏
  • 举报
回复
新建测试数据,并向B表插入张三 Order一条测试数据:
--测试数据
if not object_id(N'A') is null
drop table A
Go
Create table A([NO] INT PRIMARY KEY IDENTITY,[USERNAME] nvarchar(22),[TABNAME] nvarchar(21),[MESSAGE] nvarchar(22),[STATUS] nvarchar(22))
GO
if not object_id(N'B') is null
drop table B
Go
Create table B([USERNAME] nvarchar(22),[TABNAME] nvarchar(25))
Insert B
select N'张三',N'Order'
Go
--测试数据结束


建立触发器:
CREATE TRIGGER dbo.A_TRI
ON [dbo].[A]
AFTER INSERT
AS
UPDATE A
SET MESSAGE = NULL,
STATUS = -1
FROM Inserted,
B
WHERE Inserted.NO = A.NO
AND Inserted.USERNAME = B.USERNAME
AND Inserted.TABNAME = B.TABNAME;
GO


测试插入数据:
INSERT INTO dbo.A
(
USERNAME,
TABNAME,
MESSAGE,
STATUS
)
VALUES
( N'张三', -- USERNAME - nvarchar(22)
N'Order', -- TABNAME - nvarchar(21)
N'测试1', -- MESSAGE - nvarchar(22)
N'1' -- STATUS - nvarchar(22)
),( N'李四', -- USERNAME - nvarchar(22)
N'Book', -- TABNAME - nvarchar(21)
N'测试2', -- MESSAGE - nvarchar(22)
N'1' -- STATUS - nvarchar(22)
)


读取结果:
SELECT * FROM dbo.A
SELECT * FROM dbo.B


hcl_encoding 2019-01-10
  • 打赏
  • 举报
回复
大神们帮帮忙

34,594

社区成员

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

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