sql触发器的if语句
1. 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
2. 在Sql Server trigger中使用if条件句总报错
看样子是mssql,我觉得你的as下第一行的if语句不太对啊,orders. orderkey = inserted. orderkey是什么意思,orders. orderkey应该是一个表的字段值,不得用select语句来判断吗?比如
If exists( select * from orders where orderkey = inserted. orderkey)
.....
3. SQL Server触发器问题,语句有问题
你以前一直用Oracle数据库吧,SQL Server的触发器和Oracle的差别还是比较大的,MSsql中没有:new.…或:old.…的用法,inserted指的是更新或插入的数据,deleted指的是被修改或删除的数据。MSsql中的IF语句不是“IF THEN END IF”而是“IF begin end”的模式。并且各句末尾不需要加分号。
CREATE TRIGGER Insert_SC ON SC
FOR INSERT
declare @oldcno 类型,@newcno 类型,@newsnum 类型,@oldsnum 类型;
AS
BEGIN
select @oldcno=Cno from deleted
select @newcno=Cno from inserted
select @oldsnum=Snumber from deleted
IF (@oldcno= @newcno)
begin
@newsnum= @oldsnum+ 1;
update SC set Snumber =@newsnum where 唯一标识你正在操作的行;
end
END;
以上写的这个并不能直接供你使用,你还需要琢磨下修改后才能使用。
4. SQL IF 语句
来晚了~
关于判断语句看数据库吧
SQL server 支持的查询语句命令case when:
结构如下:
case
when 条件1 then 结果1
when 条件2 then 结果2
……
end
在access中,不支持case when 结构,使用 iif 代替:
结构如下:
IIF(条件,结果1,结果2)
解释:当条件成立,取结果1;当条件不成立,取结果2
IIF(TypeID=-1,'一般客人',(select ClubType.Name from ClubType where CustomerInfo.TypeID =ClubType.ID)) as TypeName
5. SQL 触发器语句
create trigger checkRoysched
on roysched
INSTEAD OF INSERT --改成这个,这是在Insert之前的触发。
as
if ((select title_id from roysched) is null) or
((select royalty from roysched) is null)
begin
print 'royalty,titlt_id字段不能为空'
rollback transaction
end
go
6. 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
7. sqlserver触发器添加条件if语句后不起作用,求解
select @t1=Not_Withdraw_Total from tbUserInfo
看看你这个@t1的具体值,应该是最后一条记录的值
这个值是否大于等于插入记录的Price*Rest_Num
8. mssql怎样在触发器中写if语句
if exists (select * 表2 where name=(select sl from inserted))
update 表2 set name=(select sl from inserted) where name=(select sl from inserted)
else
insert into ...
9. 关于sql触发器中的if和else
你用的是sql2000吗?
在sql2000里if 和else 之间必须有语句,没有语句是错误语法,你嵌套了很多层是不是有的里面没有写东西啊
例如
10. SQL触发器语句
呵呵,看到你的这个问题了,回答一下,希望能给你增加印象。
由于SqlServer 没有oracle中的行级触发器的概念,触发器如下:
create trigger [TC2]
on [dbo].[teacher]
for insert,update
as if (select salary from inserted)<3000
update teacher set salary=3000 and tid= (select tid from inserted)
说明:当你插入数据的时候,这条数据是存放在【inserted】表中的,在这个表中把【teacher】表的主键得到(假如是【tid】)然后把这个主键信息加到where 条件上,这样就能起到只更新插入的那一条数据的效果了,否则会出现更新了全表的问题。
---
以上,希望对你有所帮助。