SQL 本章學習總結
阿新 • • 發佈:2018-12-10
分頁的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
--呼叫儲存過程的關鍵字(exec)
EXEC 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('')