mssql 触发器中使用判断

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mssql 触发器中使用判断相关的知识,希望对你有一定的参考价值。

有一个表名user 判断新增数据中的列BID的值 等于列名AID已经存在的相同值,如果AID等于BID值,就读取列名CID的值,同时把读取出来的值更新在新增数据的的CID中
比如
AID BID CID
113 0 25
114 222 22
115 0 0
116 113 0
新插入的数据AID是116 BID是113 ,113和AID中的113相同,那么读取CID的25,更新到AID等于116的那一行,把CID更新为25
意思是当检测到新增数据BID的值等于AID列的其中一个值,就读取AID那一行的CID值,并写入到新增数据的CID中
忘记说了,插入新数据的时候,我也用了一个触发器,目的是检测插入的新数据BID是否等于一个固定值,如果是这个固定值,就更新CID的值等于固定值。这个固定值我用了多个触发器,更新的值也都不同。有
然后现在需要的这个触发器是判断BID的值等于AID的值的情况下,读取之前已经更新的CID的值后,再更新到新插入的数据的CID里

参考技术A if (object_id('tr_insert', 'TR') is not null)
drop trigger tr_insert
GO
CREATE TRIGGER tr_insert
ON user
FOR insert
AS
DECLARE @AID, @BID, @CID INT;
SELECT @AID=AID,@BID=BID FROM INSERTED
IF EXISTS(SELECT 1 FROM user WHERE AID = @BID)
BEGIN
SELECT @CID=CID FROM user(UPDLOCK) WHERE AID = @BID
INSERT INTO user VALUES(@AID,@BID,@CID);
END
GO追问

第13行
列名或所提供值的数目与表定义不匹配

INSERT INTO user VALUES(@AID,@BID,@CID); 是不是这句需要怎么改一下,我正常从网页提交写入新数据后,是插入一条CID默认等于0的数据,用这个触发器的目的是,检测到增加的这条数据后,判断BID等于AID的数据,如果成立,然后更新CID为那行显示的25,

麻烦再帮忙一下,我对数据库确实太陌生了,前面的代码我感觉都对的

追答

那个user前面加上INSERT INTO user(AID,BID,CID) VALUES(@AID,@BID,@CID);详情请加群“高级SQL讨论”

追问

好像还是不行,AID是自动生成的数字,主要是检测到增加这一条数据的时候,只判断BID是不是等于以上存在的AID相同值,如果有相同的,就读取相同的那一行的CID值,然后更新到新插入数据的CID中,我已经申请加群了

本回答被提问者和网友采纳

MSsql数据库中的表级通知[关闭]

【中文标题】MSsql数据库中的表级通知[关闭]【英文标题】:Table Level Notification in MSsql Database [closed] 【发布时间】:2018-03-05 02:59:06 【问题描述】:

通知:当数据插入、更新到表中时,我如何从 Sql Server 数据库中获取通知(表名和行 ID)。我的 Allication 使用 java 或 javascript。请建议。

【问题讨论】:

您需要查找触发器。 我的要求是触发器不能插入到任何其他 temp_table 中。 在 oracle "USER_CHANGE_NOTIFICATION_REGS" 中。 docs.oracle.com/cd/E11882_01/java.112/e16548/… 看看这个***.com/questions/2247679/… 【参考方案1】:

在 MS SQL 中,您只需使用触发器(如 MySQL),

CREATE TRIGGER TriggerName ON SourceOfYourTabe
FOR INSERT, UPDATE, DELETE  
AS
   // SOME QUERY TO PUSH YOUR NOTIF
GO

参考: https://docs.oracle.com/cd/E11882_01/java.112/e16548/dbchgnf.htm#JJDBC28816 https://docs.microsoft.com/en-us/sql/t-sql/statements/create-trigger-transact-sql

【讨论】:

使用触发器如何在 sql server 中动态获取消息通知。ex:postgres 下面:创建或替换函数 pg.notify_change() 返回触发器为 $$ BEGIN PERFORM pg_notify('tblexample','pg.例子');返回新的;结尾; $$ 语言 plpgsql; CREATE TRIGGER table_change AFTER INSERT OR UPDATE or DELETE ON pg.tblexample FOR EACH ROW EXECUTE PROCEDURE ph.notify_change();

以上是关于mssql 触发器中使用判断的主要内容,如果未能解决你的问题,请参考以下文章

从 mssql 触发器运行 php 脚本

powershell 使用PowerShell导出MSSQL架构。此脚本将导出表,存储过程,触发器,函数和视图的模式定义

MSsql数据库中的表级通知[关闭]

MSSQL 事务,视图,索引,存储过程,触发器

mssql2005怎么写触发器啊?

MSSQL 中的 INSERT 触发器:按变量的目标表