1. 程式人生 > >SQL 本章學習總結

SQL 本章學習總結

分頁的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,'新增學生姓名'[email protected]+',年齡'+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)+',姓名是:'[email protected]+',年齡是:'+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,,'修改前的姓名是:'[email protected]+'修改後的姓名是:'[email protected],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 [email protected]
        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('')