diff --git "a/28\350\242\201\350\264\265\346\243\256/\347\254\224\350\256\260/2022-1012\350\247\246\345\217\221\345\231\250instead of\345\222\214\345\210\206\351\241\265\346\237\245\350\257\242\347\254\224\350\256\260.txt" "b/28\350\242\201\350\264\265\346\243\256/\347\254\224\350\256\260/2022-1012\350\247\246\345\217\221\345\231\250instead of\345\222\214\345\210\206\351\241\265\346\237\245\350\257\242\347\254\224\350\256\260.txt" new file mode 100644 index 0000000000000000000000000000000000000000..004e7ac219f3fe799d4723a1941ca142b9ad213a --- /dev/null +++ "b/28\350\242\201\350\264\265\346\243\256/\347\254\224\350\256\260/2022-1012\350\247\246\345\217\221\345\231\250instead of\345\222\214\345\210\206\351\241\265\346\237\245\350\257\242\347\254\224\350\256\260.txt" @@ -0,0 +1,55 @@ + +***instead of +instead of触发器指定执行触发器而不是执行触发 的SQL 语句,从而替代触发语句的操作。 + 在表或视图上,每个 INSERT、UPDATE 或 DELETE 语句最多可以定义一个 INSTEAD OF 触发器。并且,可以在每个具有 INSTEAD OF 触发器的视图上定义视图。 + +优点: +▶ 使不能更新的视图支持更新。包含多个基表的视图必须使用 Instead Of 触发器来支持引用表中数据的插入、更新和删除操作 + +▶ 拒绝批处理中的某些部分同时允许批处理的其它部分成功 + +▶ 如果遇到错误情况则采取备用操作 + + +After 触发器 与 Instead of 触发器区别: + 对于 after触发器只有执行某一操作insert、update、delete之后触发器才被触发,且只能定义在表上;instead of触发器表示并不执行其定义的操作(insert、update、delete)而仅是执行触发器本身。 + after触发器是在操作成功后,所采取的一些动作,而对于instead of触发器,真正起作用的是触发器里面的动作! + +create trigger mytrg +on 表名 instead of(insert, delete,update) +as +go + + +***分页查询 +第一种 top +1、 先查询当前页码之前的所有数据id + +select top ((当前页数-1)*每页数据条数) id from 表名 + +2、再查询所有数据的前几条,但是id不在之前查出来的数据中 + +select top 每页数据条数 * from 表名 where id not in ( select top ((当前页数-1)*每页数据条数) id from 表名 ) + +3、查询出当前页面的所有数据后,再根据一列数据进行排序 + +select * from ( + +select top 每页数据条数 * from 表名 where id not in (select top ((当前页数-1)*每页数据条数) id from 表名) + +) as b order by 排序列名 desc + +第二种、ROW_NUMBER()分页 +1、使用ROW_NUMBER()函数先给查询到的所有数据添加一列序号(就是给数据加一列1、2、3、4、5…这个,一定不要去掉后面起的那个别名) + +select * from (select ROW_NUMBER() OVER(Order by id) AS RowNumber,* from 表名) as b + +2、然后就是根据前面加的那一列序号,运用数学计算出当前页是 第x 到 y条 数据 + +select * from (select ROW_NUMBER() OVER(Order by id) AS RowNumber,* from 表名) as b + +where b.RowNumber BETWEEN (当前页数-1)每页数据条数+1 and 当前页数每页数据条数order by 排序列名 desc + +3、这种分页语句的排序列在这里(这里默认根据id这一列排序的,有需要的可以改一下,多个排序列可以写【order by id, creatTime, name, …】) + +select * from (select ROW_NUMBER() OVER(Order by 排序列名) AS RowNumber,* from 表名) as b