sql触发器if条件判断
㈠ mssql触发器 if
ALTERTRIGGER[dbo].[ICMO_update2]
ON[dbo].[ICMO]
afterupdate
AS
begin
declare@FCheckerID_pint,@FCheckerIDint
select@FCheckerID_p=t3.FCheckerID,@FCheckerID=t3.FCheckerID
fromICMOt1,insertedt2,ICMOt3
wheret1.FInterID=t2.FInterID
andt3.FParentInterID=t1.FInterID
if(@FCheckerID_pisnull)
if(@FCheckerIDisnotnull)
raiserror("请先处理子任务",18,1)withNOWAIT
else
updatet1setFCheckerID=1fromICMOt1,insertedt2
wheret1.FInterID=t2.FInterID
end
㈡ SQL触发器可否判断是什么操作出发的
你在表上创建的触发器的时候,会默认出现一条创建触发器的语句模板的,上面就会列出是for update ,insert ,delete的。默认是所有操作都会触发,如果你只需要update 的时候出发就把其他两个关键字删除掉就行了。
㈢ SQL语句中如何使用含有ifelse判断语句
if else语句只有在存储过程,触发器之类的才有,今天突然在sql上当满足某种条件上要取不同的字段值,一开始直接网上查找相关资料,哇,sql上不支持!!!
不过可以使用case when语句解决,各种数据库都支持。
语法:
case when 条件1 then 结果1 when 条件2 then 结果2 else 结果N end1
可以有任意多个条件,如果没有默认的结果,最后的else也可以不写,
select case when col1 > 1 then col2 else col3 end from XXXtable
㈣ sql 触发器 if
不知道是 Oracle 还是 SQL Server
如果是 Oracle , 基本上是用 fei07100107 那种的用法
如果是 SQL Server
那么需要定义几个变量。
create trigger lev
on customer
for update
as
DECLARE
@NewIntegral INT;
BEGIN
-- 取得 本次 更新的 integral
-- 如果一条语句,更新很多条记录的,这里要用游标处理。
SELECT @NewIntegral = integral FROM INSERTED
-- 如果这里不是更新全部表的,
-- 那么麻烦上面再多定义一个 变量,
-- 从 INSERTED 里面,取得 主键, 下面这里加 WHERE 条件。
if @NewIntegral>50 and @NewIntegral<200
begin
update customer
set lev=1
end
else if @NewIntegral>200 and @NewIntegral<500
begin
update customer
set lev=2
end
else @NewIntegral>500
begin
update customer
set lev=3
end
END
㈤ 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触发器判断指定列的数据满足条件时删除指定表,
tableA colA1 colA2
tableB
当 tableA 有新尘裂增、修改、派绝闭删除时,触发器执行以下
if colA1 满足你宏闷的条件 ,then drop table tableB
触发器执行结束
㈦ SQL 触发器 判断值的时候应该如何判断
在触发器中判断哪些列被更改有以下两种方法:
第一、可以使用Update()函数 ,语法:Update(列名);返回值:bool值。如果该列被更新则为True,否则为False。该函蔽宏数比较方便也比较实咐笑用。
第二、使用COLUMNS_UPDATED()函数。 语法:COLUMNS_UPDATED ( ) ;返回值:varbinary
1.八列以内的表。可以直接使用 COLUMNS_UPDATED()函数来判断。比如:要测试一下第一列有没有被修改,则可以用COLUMNS_UPDATED()& 1=1来判断。 如果为True,则该列被更新;否则未被更新。衡并含要测试第五列,则可用 COLUMNS_UPDATED()& 16=16来判断。
2.八列以上的表。要测试第一列被更新用 <!--[endif]-->substring(COLUMNS_UPDATED(),1,1) & 1=1,如果测试第11列,则用 <!--[endif]-->substring(COLUMNS_UPDATED(),2,1) & 4=4。以此类推。
㈧ MS SQL触发器的问题,如何加条件判断,如果条件不满足,不执行插入操作,具体看注释部分
用神轮ROLLBACK或者游或信RAISERROR,或者两个一起用团带。
create trigger JieShu
on 图书借阅表
for insert
as
begin
declare @sh int
select @sh=书号 from inserted
if exists(select * from 图书库存表 where 书号=@sh)
delete 图书库存表 where 书号=@sh
else
BEGIN
RAISERROR ('您所借的书不存在!书号:%d', 16, 1, @sh)
ROLLBACK TRANSACTION
END
end