xml地图|网站地图|网站标签 [设为首页] [加入收藏]
查询各分类中最大自增ID,2008从入门到精通
分类:数据库

5.在order by 加限制排序条件

 

目录

SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = DATEADD(month, DATEDIFF(month, '19991231', orderdate), '19991231');

 

1.3.3.2.查看触发器嵌套的层数

可以使用@@NESTLEVEL全局变量来查看当前触发器嵌套的层数
示例13:在示例11teacher_course_delete_batch触发器中利用@@NESTLEVEL全局变量查看当前触发器嵌套的层数
执行下列语句修改teacher_course_delete_batch触发器

ALTER TRIGGER teacher_course_delete_batch
ON teacher_course
FOR DELETE
AS
DECLARE @course_id CHAR(4)
DECLARE teacher_course_cursor CURSOR LOCAL FORWARD_ONLY
FOR SELECT DISTINCT course_id FROM deleted
OPEN teacher_course_cursor
FETCH NEXT FROM teacher_course_cursor INTO @course_id
WHILE @@FETCH_STATUS=0
BEGIN
IF (SELECT COUNT(*) FROM teacher_course WHERE course_id=@course_id)=0
DELETE FROM course_selection WHERE course_id=@course_id
ELSE
PRINT 'course_id为'+@course_id+'的课程依然正常开课,该课程的学生选课情况不予删除'
FETCH NEXT FROM teacher_course_cursor INTO @course_id
SELECT @@NESTLEVEL AS NESTLEVEL
END
GO

测试teacher_course_delete_batch触发器(数据就不看了,未影响触发器原来的功能)
执行下列语句

DELETE FROM teacher_course WHERE teacher_id='0009'
--直接在teacher_course表中删除,激活teacher_course_delete_batch触发器

结果如图所示
图片 1
执行下列语句

DELETE FROM teacher WHERE teacher_id='0009'
--在teacher表中删除,触发teacher_delete_batch触发器,进而触发teacher_course_delete_batch触发器

结果如图所示
图片 2

 使用EMONTH 对输入的日期返回月末日期   类似动态条件

CREATE TABLE `msg_detail` (
    `id` INT(11) NOT NULL AUTO_INCREMENT COMMENT 'id',
    `title` VARCHAR(200) NOT NULL DEFAULT '' COMMENT '标题',
    `content` TEXT NOT NULL COMMENT '内容',
    `audio_url` VARCHAR(255) NOT NULL DEFAULT '' COMMENT '音频地址',
    `type_id` TINYINT(4) NOT NULL DEFAULT '0',
     PRIMARY KEY (`id`),
    INDEX `cid` (`cid`) USING BTREE,
    INDEX `column_id` (`column_id`) USING BTREE
)
COMMENT='内参表'
COLLATE='utf8_general_ci'
ENGINE=InnoDB
AUTO_INCREMENT=1;

1.3.1.创建DML触发器

两个条件 0,1 默认排序规则 通过int 对相应的条件进行排序

  查询所有类型内参最大id,可用如下sql: 

1.3.3.3.禁用和启用嵌套触发器

EXEC sp_configure 'nested triggers',0;
GO
--禁用嵌套触发器
EXEC sp_configure 'nested triggers',1;
GO
--启用嵌套触发器

DATEADD(month, DATEDIFF(month, '19991231', orderdate), '19991231') 中间是加上的月数  最后一个从什么时间开始加

 select max(id),type_id from msg_detail group by type_id; 

1.3.4.递归触发器

4.条件筛选case

假如现在有表结构:

1.3.3.嵌套触发器

DATEDIFF(month, '19991231', orderdate)  相差多少月  从19991231到 orderdate之间先查多少月

1.3.2.创建DDL触发器

DDL触发器只为了响应CREATEDROPALTER事件而激活,它的作用域是整个数据库或者服务器,而不是作用域某张表或试图。它可以有效控制哪位用户可以修改数据库结构以及如何修改。
示例10:创建一个DDL触发器,控制上班时间(8:00-18:00)不能对LibraryManagement数据库表和试图结构进行新建,修改和删除操作。
执行下列语句创建触发器deny_DDL_table

CREATE TRIGGER deny_DDL_table
ON DATABASE
WITH ENCRYPTION
FOR CREATE_TABLE,DROP_TABLE,ALTER_TABLE
AS
DECLARE @eventdata XML
SET @eventdata=EVENTDATA()
IF(DATEPART(HOUR,GETDATE()) BETWEEN 8 AND 17)
BEGIN
SELECT '触发器deny_DDL_table已禁止工作时间8:00-18:00对LibraryManagement数据库的CREATE,ALTER,DROP操作'
SELECT @eventdata.value('(/EVENT_INSTANCE/EventType)[1]','nvarchar(max)') AS EventType,--事件类型
@eventdata.value('(/EVENT_INSTANCE/PostTime)[1]','nvarchar(max)') AS PostTime,--时间触发的时间
@eventdata.value('(/EVENT_INSTANCE/DatabaseName)[1]','nvarchar(max)') AS DatabaseName,--数据库名字
@eventdata.value('(/EVENT_INSTANCE/ObjectName)[1]','nvarchar(max)') AS ObjectName,--操作的对象名称
@eventdata.value('(/EVENT_INSTANCE/ObjectType)[1]','nvarchar(max)') AS ObjectType,--操作的对象类型
@eventdata.value('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)') AS CommandText--操作命令文本
ROLLBACK---对操作进行回滚,也可以不回滚
END
GO

执行以下代码以测试DDL触发器deny_DDL_table的正确性

USE LibraryManagement
CREATE TABLE test(
t_id VARCHAR(2),
t_name VARCHAR(20)
)

结果如图所示
图片 3
图片 4

注:EVENTDATA()可在触发器内部使用,返回有关数据库和服务器事件的信息,以XML格式返回。只有直接在DDL或登录触发器内部引用EVENTDATA时,EVENTDATA才会返回数据。如果EVENTDATA由其他例程调用(即使这些例程由DDL或登录触发器进行调用),将返回 NULL

SELECT orderid, orderdate, custid, empid
FROM Sales.Orders
WHERE orderdate = EOMONTH(orderdate);

1.3.4.1.递归触发器

触发器被激活,更改了表中数据,这种更改又激活了它自己,这种触发器被称为递归触发器。数据库创建时默认递归触发器禁用。但可以使用ALTER DATABASE选项来启用它。递归触发器启用的先决条件是嵌套触发器必须是启用状态,如果嵌套触发器禁用,不管递归触发器的配置是什么都将被禁用。而在递归触发器中,inserted表和deleted表都只包含被上一次触发器影响的行数据。
递归触发器有以下两种不同类型(这边没有合适的应用示例可举,先不举例了)

本文由澳门新葡亰手机版发布于数据库,转载请注明出处:查询各分类中最大自增ID,2008从入门到精通

上一篇:关键字在值为null的应用举例,查询优化之 下一篇:没有了
猜你喜欢
热门排行
精彩图文