当前位置:首页 » 编程语言 » sql触发器判断

sql触发器判断

发布时间: 2022-10-25 23:52:14

㈠ mssql触发器判断语句

你的问题还是没有描述清楚,那就先回答我的问题:
1,AID、BID、CID是不是按照序列方式递增的,如:1,2,3, ............
2,AID、CID列的数据是不是提前已经写好的?
3,从外部输入的参数(新增数据)是不是只有一个参数被插入到USER表的BID列?
4,按照我的理解你是有两个表是么,一个原表,一个新表?

㈡ 在Sql Server触发器中判断操作是Insert还是Update还是Delete

DECLARE
@IsInsert bit,
@IsUpdate bit,
@IsDelete bit
IF EXISTS(SELECT 1 FROM inserted) AND NOT EXISTS(SELECT 1 FROM deleted)
SET @IsInsert = 1
ELSE
SET @IsInsert = 0
IF EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
SET @IsUpdate = 1
ELSE
SET @IsUpdate = 0
IF NOT EXISTS(SELECT 1 FROM inserted) AND EXISTS(SELECT 1 FROM deleted)
SET @IsDelete = 1
ELSE
SET @IsDelete = 0
create trigger Update_Del on Table
for update,delete
as
if not exists(select 1 from inserted)
begin /*inserted表无记录,是删除*/
end
else
begin /*是更新*/ end
go
关键在于Inserted表
触发器语句中使用了两种特殊的表:deleted
表和 inserted 表。
Deleted
表用于存储 DELETE 和 UPDATE 语句所影响的行的复本。在执行 DELETE 或 UPDATE 语句时,行从触发器表中删除,并传输到 deleted
表中。Deleted 表和触发器表通常没有相同的行。
Inserted
表用于存储 INSERT 和 UPDATE 语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到 inserted
表和触发器表中。Inserted 表中的行是触发器表中新行的副本。
1.插入操作(Insert)

Inserted表有数据,Deleted表无数据
2.删除操作(Delete)

Inserted表无数据,Deleted表有数据
3.更新操作(Update)

Inserted表有数据(新数据),Deleted表有数据(旧数据)

㈢ mssql 触发器中使用判断

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

㈣ SQL触发器判断总是为假

createtriggertri_InsertStudy
onStudyCourse_Table
forinsert--插入触发
as
begin
--定义变量
declare@idvarchar(10),@StuIDint,@TeaIDint,@CourseIDint,@tempvarchar(10),@countSumint;
--变量赋值
select@id=StudyID,@StuID=StuID,@TeaID=TeaID,@CourseID=CourseIDfrominserted;
select@countSum=count(StudyID)fromStudyCourse_TablewhereStudyID=@id;
if@idisnull
begin
select@id=left(newid(),10);
select2;
insertintoStudyCourse_Table(StudyID,StuID,TeaID,CourseID)values(@id,@StuID,@TeaID,@CourseID)
end
else
begin
if@countSum>1
begin
select3;
select@temp=left(newid(),10);
updateStudyCourse_TablesetStudyID=@temp,StuID=@StuID,TeaID=@TeaID,@CourseID=CourseID
whereStudyID=@idandStuID=@StuIDandTeaID=@TeaIDand@CourseID=CourseID;
end
else
begin
select1;
end
end
end
/*
上面是修改过的
上面的触发器存在问题,就是一次插入多条记录时,肯定会有问题,因为inserted本身是个结果集,除非你能保证这个表的数据都是一条一条的插入,而不是批量插入
批量插入的话需要另外一种写法。因为对你业务不了解,无法帮到你。
*/

㈤ 如何看sql 中的触发器触发了什么

1)查看表中的触发器类型:
sp_helptrigger:返回对当前数据库的指定表定义的 DML 触发器的类型。sp_helptrigger 不能用于 DDL 触发器。
示例: EXEC sp_helptrigger '表名'

2)查看触发器的有关信息:
sp_help:报告有关数据库对象(sys.sysobjects 兼容视图中列出的所有对象)、用户定义数据类型或某种数据类型的信息。
示例: EXEC sp_help '触发器名'

3)显示触发器的定义:
sp_helptext:显示规则、默认值、未加密的存储过程、用户定义函数、触发器或视图的文本。
示例: EXEC sp_helptext '触发器名'

4)查看当前库中所有的触发器:
查询脚本:SELECT * FROM Sysobjects WHERE xtype = 'TR'

5)查看当前库中所有的触发器和与之相对应的表:
查询脚本:SELECT tb2.name AS tableName,tb1.name AS triggerName FROM Sysobjects tb1 JOIN Sysobjects tb2 ON tb1.parent_obj=tb2.id WHERE tb1.type='TR'

热点内容
比亚迪唐dmi哪个配置值得买 发布:2025-01-04 05:50:17 浏览:169
内存储器的功能 发布:2025-01-04 05:50:11 浏览:679
sqlcountsum 发布:2025-01-04 05:49:24 浏览:233
linux怎么改ip 发布:2025-01-04 05:39:32 浏览:477
c语言mallocfree 发布:2025-01-04 05:38:49 浏览:267
台式电脑在哪里设置密码锁 发布:2025-01-04 05:36:27 浏览:631
msg编译路径 发布:2025-01-04 05:36:26 浏览:666
雷霆战机电脑脚本 发布:2025-01-04 05:26:43 浏览:995
原神在哪里下载安卓手机 发布:2025-01-04 05:21:50 浏览:378
csr2安卓正式服在哪里 发布:2025-01-04 05:17:33 浏览:222