SQL 本章学习总结

本文详细介绍SQL分页语句的实现方法,包括使用ROW_NUMBER()进行行编号,以及通过存储过程、视图、触发器等高级特性增强数据库操作。同时,文章探讨了事务处理、函数创建及表值函数的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

分页的SQL语句

DECLARE @PAGEINDEX INT --定义变量索引页数
DECLARE @PAGESIZE INT--定义变量当前的页数
--在编写SQL的语句时,如果有查询先查询后分页
SELECT * FROM (
SELECT ROW_NUMBER() OVER(ORDER BY ID) AS NUM ,* FROM STUDENT) AS TEMP
WHERE TEMP.NUM BETWEEN ((@PAGEINDEX-1)*@PAGESIZE+1) AND (@PAGEINDEX*@PAGESIZE)

创建视图

CREATE VIEW V_STUDENT
AS
SELECT * FROM STUDENT

创建存储过程关键字(PROC/PROCEDURE)

1.无参查询

CREATE PROC/PROCEDURE P_SEARCH
AS
BEGIN
SELECT * FROM STUDENT
END

--调用存储过程的关键字(execEXEC P_SEARCH

2.有参存储过程

CREATE PROC/PROCEDURE P_INSERT
@STUTYPEID INT,
@STUNAME NVARCHAR(20),
@STUSEX CHAR(4),
@STUCOUNT INT OUTPUT
AS
BEGIN
    INSERT INTO STUDENT VALUES(@STUTYPEID,@STUNAME,@STUSE)
    SELECT @STUCOUNT = COUNT(ID)  FROM STUDENT
END

--封装BEGIN END之间的语句方便继续调用
--创建一个存储过程 输出一个新的创建的参数  

创建/删除临时表的关键字是:(CREATE \DROP)

CREATE TABLE #名称
EG: CREATE TABLE #STUDENTLOG
DROP FROM #临时表
EG: DROP FROM #STUDENTLOG

事务的定义:(事务就是一个异常处理机制)

BEGIN TRAN --定义事务
BEGIN TRY
    INSERT INTO STUDENT VALUSE(...)
END TRY
BEGIN CATCH
    --异常处理机制 能够判断语法是否正确
END CATCH   
IF(@@TRANCOUNT>0)
ROLLBACK TRAN
COMMIT TRAN

触发器的定义关键字(TRIGGER)

1.插入触发器

--创建触发器
CREATE TRIGGER T_INSERTSTU
ON STUDENT--基于的是那个表
AFTER INSERT --在添加后触发
AS
BEGIN 
DECLARE @STUNAME NVARCHAR(50)--定义变量
DECLARE @STUAGE INT
SELECT @STUNAME=STUNAME,@STUAGE=STUAGE FROM INSERTED --定义的变量赋值来自于添加中的相应的字段
INSERT INTO STUDENTLOG VALUSE (0,'新增学生姓名'+@STUNAME+',年龄'+CONVERT(NVARCHAR(10),@STUAGE)+'岁'+GETDATE())--将相应的字段拼接
END

执行了添加语句触发T_INSERTSTU

2.删除触发器

–创建一个删除触发器

CREATE TRIGGER T_DELSTUDENT
ON STUDENT
AFTER DELETE
AS
BEGIN 
    DECLARE @ID INT
    DECLARE @STUNAME NVARCHAR(20)
    DECLARE @STUAGE INT
    SELECT @ID = ID,@STUNAME=STUNAME,@STUAGE=STUAGE FROM DELETED
    INSERT INTO STUDENTLOG VALUES(1,'删除了的学生的ID是:'+CONVERT(nvarchar  (10),@ID)+',姓名是:'+@STUNAME+',年龄是:'+CONVERT(nvarchar (10),@STUAGE),GETDATE())
END
DELETE FROM STUDENT WHERE ID=

3.修改触发器

--创建一个修改的触发器
CREATE TRIGGER T_UPTSTUDENT
ON STUDENT
AFTER UPDATE
AS
BEGIN
    DECLARE @STUNAMEU NVARCHAR(20)--修改之后的姓名
    DECLARE @STUAGEU INT --修改之后的年龄
    DECLARE @STUNAMEA NVARCHAR(20)--修改之前的姓名
    DECLARE @STUAGEA INT --修改之前的年龄
    SELECT @STUNAMEA = STUNAME ,@STUAGEA = STUAGE FROM DELETED
    SELECT @STUNAMEU =STUNAME ,@STUAGEU = STUAGE FROM INSERTED
    INSERT INTO STUDENTLOG VALUSE(1,,'修改前的姓名是:'+@STUNameA+'修改后的姓名是:'+@STUNameU,GETDATE())
END

--修改之后触发
update Student set stuName='' where ID=1

在使用SELECT INTO 新表 FROM 旧表 时,新表可以不必存在 系统会自动生成一个表

创建标量函数需要主要点:

CREATE FUNCTION F_NAME(@ID INT)--括号里面是参数和参数的类型
    RETURN 具体的类型  --返回的类型
    AS 
    BEGIN 
        DECLARE @SQLNAME NVARCHAR(30)
        SELETE @SQLNAME(STUNAME+STUSEX) FROM STUDENT WHERE ID =@ID
        RETURN @STUNAME
    END
调用函数需要加上dbo.
SELECT DBO.F_NAME(ID) DBO.STUDENT--结构
SELECT * FROM DBO.STUDENT

第一种方式新建表值函数

    CREATE FUNCTION F_TABLENAME()
    RETURN TABLE
    AS
    RETURN (SELEDCT * FROM STUDENT)

第二种方式新建表值函数

create function f_table(@ name nvarchar(20))
    return @tb table(name nvarchar(50),adress nvarchar(50))
    as 
    begin 
    insert into @tb select '张国忠''河北石家庄';
    return
    end
    select * from dbo.f_table


    --测试调用
    select * from dbo.f_table('')
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值