sql server 替换触发器 sqlServer2012 可通过执行什么 语句创建触发器?

[更新]
·
·
分类:互联网
3059 阅读

sqlServer2012

sqlServer2012 可通过执行什么 语句创建触发器?

可通过执行什么 语句创建触发器?

可以通过DDL语言来创建触发器,打开SQL SERVER 2012数据库,然后打开查询分析器,代码CREATE TRIGGER 触发器名,就可以创建触发器

怎么导出Sql Server数据库表结构和数据的脚本?

一、选中要导出的数据库–gt任务–gt生成脚本(或者在任务里面有生成脚本这个选项,好好找找能找到的!)

SQL server如何调试触发器?

触发器是一种特殊的存储过程。当指定表中的数据发生变化时 触发器自动生效。他与表紧密相连,可以看做是表定义的一部分。触发器不能通过名称直接被调用,更不允许设置参数。触发器优点:
(1)触发器自动执行,表中数据被修改后,触发器立即被激活。
(2)可以实现复杂的数据更新。
(3)一个表中可以存在三种不同的触发器(INSERT,UPDATE和DELETE)
触发器有三个种类:DML触发器丶DDL触发器和登录触发器。
AFTER触发器:在执行了INSERTINSERT,UPDATE、DELETE之后执行AFTER触发器

sqlserver触发器for和after的区别?

FOR | AFTER
AFTER 指定触发器仅在触发 SQL 语句中指定的所有操作都已成功执行时才被触发。所有的引用级联操作和约束检查也必须在激发此触发器之前成功完成。
如果仅指定 FOR 关键字,则 AFTER 为默认值。
不能对视图定义 AFTER 触发器。
INSTEAD OF
指定执行 DML 触发器而不是触发 SQL 语句,因此,其优先级高于触发语句的操作。
如果仅指定 FOR 关键字,则 AFTER 为默认值。
也就是说, FOR AFTER。
下面是一个触发器的例子:
-- 创建测试主表.
CREATE TABLE test_main (
id INT,
value VARCHAR(10),
PRIMARY KEY(id)
)
-- 创建测试子表.
CREATE TABLE test_sub (
id INT,
main_id INT,
value VARCHAR(10),
PRIMARY KEY(id)
)
-- 创建外键.
ALTER TABLE test_sub
ADD CONSTRAINT main_id_cons
FOREIGN KEY (main_id) REFERENCES test_main
-- 创建 FOR 触发器.
CREATE TRIGGER InsertTest
ON test_sub
FOR INSERT
AS
BEGIN
PRINT(#39INSERT test_sub!#39)
END
Go
INSERT INTO test_sub VALUES( 100,100,#39100#39)
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY 约束#34main_id_cons#34冲突。该冲突发生于数据库#34TestDev#34,表#34dbo.test_main#34, column #39id#39。
语句已终止。
从上面的结果可以看到,由于外键冲突,插入失败,导致触发器也没有被执行。
-- 修改为 AFTER 触发器.
ALTER TRIGGER InsertTest
ON test_sub
AFTER INSERT
......
INSERT INTO test_sub VALUES( 100,100,#39100#39)
消息 547,级别 16,状态 0,第 1 行
INSERT 语句与 FOREIGN KEY 约束#34main_id_cons#34冲突。该冲突发生于数据库#34TestDev#34,表#34dbo.test_main#34, column #39id#39。
语句已终止。
可以看到,AFTER 运行结果与 FOR 一样。
-- 修改为 INSTEAD OF 触发器.
ALTER TRIGGER InsertTest
ON test_sub
INSTEAD OF INSERT
......
INSERT INTO test_sub VALUES( 100,100,#39100#39)
INSERT test_sub!
(1 行受影响)
从上面的结果看到,触发器被执行了。
但是 test_sub 中并没有 100,100,#39100#39 的数据。
原因在于:
INSTEAD OF 指定执行 DML 触发器而不是触发 SQL 语句
也就是说 当你的触发器是 INSTEAD OF INSERT 的时候
你的 INSERT 语句,将直接执行这个触发器
而不是等你 INSERT 语句执行完了,数据写到表里面了以后,才触发。