SQL 函數、預存程序、觸發器、串聯刪除、資料大量匯入

來源:互聯網
上載者:User
use xsgl go /*自訂函數 --純量涵式--資料表值函式--內聯資料表值函式--多語句資料表值函式在函數調用的過程中,可以用 select print exec 定義函數時就注意:1.在函數的傳回值時,如果有傳回值,那以要將該傳回值賦值給一個與傳回型別類型一樣的變數,然後將傳回值返回2.在函數執行時,一個要加dbo.functionname 不然會提示找不到函數3.函數內部不能有select print 等返回資料4.內聯資料表值函式其實就是傳回值是一個表,在其調用時,也要向一個表一樣調用select * from functionname5.資料表值函式在傳回值時,insert @info select id,name from student where id=@id return */select * from deleted 建立純量涵式create function getName (@id int )returns char(10)as begin declare @name charselect @name=name from student where id=@id return @nameend select dbo.getName(1)create function max2(@a real,@b real)returns real as begin declare @temp realif @a>@bset @temp =@aelseset @temp = @breturn @tempend -- 內聯資料表值函式create function getinfo(@id int)returns @info table(id int ,name char(10))as begin insert @info -------這一句很重要,不過不知道什麼意思 select id,name from student where id=@id  return end select * from student select * from  dbo.getinfo(1)---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------/*預存程序  1. 運行SQL 陳述式的方法有兩種,一種是儲存源碼,然後考貝運行,再者就是使用預存程序,將編譯後的SQL語句儲存在資料庫記憶體中那麼以後可以直接使用execute 來執行 2. 預存程序的分類:1.系統預存程序: 位置master 資料庫中,以sp 開頭2.使用者自訂預存程序 3. 對於經常性的操作,我們可以定義為預存程序,這樣就避免了資料在用戶端與服務之間的來回傳輸,提交效率*/exec sp_stored_procedures  --查看當前環境中的所有預存程序--建立預存程序,用於查詢學生資訊create procedure queryid @id int as select * from student where id = @id ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------觸發器觸發器是在表或視圖被修改時才調用的,如果調用某個事件,可能會觸發某個觸發器,這樣就引起敢觸發器的調用觸發器不能顯示調用,而是在表被修改改被自動調用 觸發器的各類--DML觸發器 針對 insert delete update --DDl 觸發器 針對 create alter drop -- 串聯刪除,定義一個觸發器,在刪除 student 表中的資料時,把exam 表中的與之相應對應的資料也刪除掉如:student exam 兩個表 student 表中Id為主鍵。 exam 中stu_id cau_id 為主鍵, stu_id 為引用student 表的外鍵那麼,如果要想刪除 student 表中的Id某個資料,而exam 表中也有些ID的資訊,那麼就會刪除失敗所以此時就要用到觸發器,在刪除時也可以稱為串聯刪除,即在刪除 student 表中Id資訊時,會觸發 定義在student表中delete 事件的觸發器,然後執行觸發器,將 exam表中的資料也刪除,DML觸發器是相對於某個表中的某個事件來處理的,(注意:因為src還在引用、student 表中的資料,所以會刪除失敗,我們要在建立表的時候聲明串聯刪除:)只有在定義的這個表的這個事件被執行,觸發器才會被執行,而不參顯示的執行觸發器。create trigger joindel on studentfor delete as delete from exam where stu_id=(select stu_id from deleted)drop trigger joindelselect * from student delete from student where id = 1select * from studentselect * from examdelete from student where id =2select * from student select * from exam --insert into exam values(100,3,2)delete from student where id =10------串聯刪除(修改)create table exam2 (stu_id int not null,cau_id int not null,grade int ,constraint pk2 primary key(stu_id,cau_id),constraint fk21 foreign key(stu_id) references student(id) on delete cascade,  --  聲明級聯constraint fk22 foreign key(cau_id) references cause(id))--把資料匯入  將table2中的資料匯入到table1中1. select * into talbe2 from table1 (table2 必需為新表)  2 .insert into table1 select * from table2在建立表的時候,在建立外鍵的時候,加上 on delete cascade    串聯刪除    on update cascade級聯修改select * into exam3-- exam2 必需是新表才可以,如果不是,則表提示表已存在 from examdrop table exam3insert into exam2select  * from examselect * from exam2delete from student where id = 3

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.