1. sql用触发器实现 2个表 数据关联,插入更新和删除
建议将insert ,update 和Delete 单独创建触发器
触发器中只有inserted ,deleted
insert 时inserted有值
update时,inserted和deleted都有值,deleted是修改前的值,inserted是修改后的
delete时,只有deleted有值
2. sql中如何建立一个触发器,使插入或删除某条记录时,系统能自动进行相关的提示
触发器只能删除或修改后返回一个值,这时程序后台代码在根据这个值进行相应的提示操作。
相关步骤:
1、客户端点击删除
2、调用服务端删除表的方法,同时获取删除成功或者失败的返回值
3、服务器把值传递给客户端
4、客户端获取到值显示在某个label中或者弹出提出
3. SQL求助 插入删除修改的触发器代码编写
---创建测试表:
Create Table MyTest(
id int identity(1,1) not null primary key,
[name] varchar(100) null
)
--创建触发器:
CREATE TRIGGER trigtest--创建触发器trigtest
ON mytest--在表mytest上建
for INSERT,DELETE,UPDATE--为插入,删除,修改
AS
BEGIN
declare @a int,
@b int,
@id int,
@name varchar(100),
@oldId int,--原ID号
@oldName varchar(100)--原来的name
set @a=0
set @b=0
if exists(select * from inserted)--如果存在插入新的数据则设置@a=1
begin
set @a=1
end
if exists(select * from deleted)--如果存在删除数据则设置@b=1
begin
set @b=1
end
if (@a=1)and(@b=0)--新增:当插入表inserted存在数据而删除表deleted不存数据时,为新增操作。
begin
select @id=id,@name=name from inserted
print '增加了ID号为【'+cast(@id as varchar(5))+'】Name为【'+@name+'】的数据!'
end
if (@a=1)and(@b=1)--修改:当插入表insertedt和删除表deleted都存在数据时,为修改操作。
begin
select @id=id,@name=name from inserted
select @id=id,@oldname=name from deleted
print '修改了ID号为【'+cast(@id as varchar(5))+'】的数据Name由【'+@oldname+'】变为【'+@name+'】'
end
if (@a=0)and(@b=1)--删除:当插入表inserted不存在数据而删除表deleted存在数据时,为删除操作。
begin
select @id=id,@name=name from deleted
print '删除了ID号为【'+cast(@id as varchar(5))+'】Name为【'+@name+'】的数据!'
end
END
4. SQL如何创建删除的触发器
CREATE TRIGGER A表_DEL
ON A表FOR DELETE
AS
--SET NOCOUNT ON
DELETE E
FROM A表 E
INNER JOIN deleted D ON E.主键ID = D.主键ID
5. SQL中触发器有什么作用
触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。SQL3的触发器是一个能由系统自动执行对数据库修改的语句。x0dx0a 触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。x0dx0a 触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制服从复杂的业务规则或要求。例如:您可以根据客户当前的帐户状态,控制是否允许插入新订单。x0dx0a触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。然而,强制引用完整性的最好方法是在相关表中定义主键和外键约束。如果使用数据库关系图,则可以在表之间创建关系以自动创建外键约束。x0dx0a SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。x0dx0a 语法为:x0dx0a CREATE TRIGGER `
6. sql server中的触发器问题:当批量增删数据时,inserted和deleted中的数据会多于一行吗
会,当sql server , update 或delete 多条记录时,触发器只触发一次,
inserted和deleted中的数据是 update 或 delete 的所有记录
7. 请问sql触发器insert触发器如何使用
DML触发器有三类:
1, insert触发器;
2, update触发器;
3, delete触发器;
触发器的组成部分:
触发器的声明,指定触发器定时,事件,表名以类型
触发器的执行,PL/SQL块或对过程的调用
触发器的限制条件,通过where子句实现
类型:
应用程序触发器,前台开发工具提供的;
数据库触发器,定义在数据库内部由某种条件引发;分为:
DML触发器;
数据库级触发器;
替代触发器;
DML触发器组件:
1,触发器定时
2,触发器事件
3,表名
4, 触发器类型
5, When子句
6, 触发器主体
可创建触发器的对象:数据库表,数据库视图,用户模式,数据库实例
创建DML触发器:
Create [or replace] trigger [模式.]触发器名
Before| after insert|delete|(update of 列名)
On 表名
[for each row]
When 条件
PL/SQL块
For each row的意义是:在一次操作表的语句中,每操作成功一行就会触发一次;不写的话,表示是表级触发器,则无论操作多少行,都只触发一次;
When条件的出现说明了,在DML操作的时候也许一定会触发触发器,但是触发器不一定会做实际的工作,比如when 后的条件不为真的时候,触发器只是简单地跳过了PL/SQL块;
Insert触发器的创建:
create or replace trigger tg_insert
before insert on student
begin
dbms_output.put_line('insert trigger is chufa le .....');
end;
执行的效果:
SQL> insert into student
2 values(202,'dongqian','f');
insert trigger is chufa le .....
update表级触发器的例子:
create or replace trigger tg_updatestudent
after update on student
begin
dbms_output.put_line('update trigger is chufale .....');
end;
运行效果:
SQL> update student set se='f';
update trigger is chufale .....
已更新8行;
可见,表级触发器在更新了多行的情况下,只触发了一次;
8. SQL触发器实现两张表增删改级联 数据库不在同一台服务器上 怎么实现
同一服务器可以
在语句 表 的前面加上 数据库名.dbo
例如 insert into table_XFBD2 改成 INsert Into 新库.dbo.table_XFBD2
前提执行这个触发器的用户必须在另外一个库上也有权限
不同服务器的话可以用链接服务器来实现,参考
http://yunlongzheng.blog.51cto.com/788996/468478
9. sql server 2005 写触发器 ,要求 A表中做了增删该, B 表将记录他的 操作信息!
create trigger AfterA on A for
insert,update,delete
as
declare @id int;
begin
if exists(select 1 from inserted) and not exists (select 1 from deleted)
begin
insert into b select inserted.id,'1',getdate() from inserted
end
if exists(select 1 from inserted) and exists (select 1 from deleted)
begin
insert into b select inserted.id,'3',getdate() from inserted,deleted where inserted.id = deleted.id
end
if not exists(select 1 from inserted) and exists (select 1 from deleted)
begin
insert into b select deleted.id,'2',getdate() from deleted;
end
end
----1、2、3分别对应了增删改操作