1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 create database Personnel_training_dbgouse Personnel_training_dbgo create table dept( deptid int primary key identity(1,1), deptname varchar(20) not null, remark varchar(20) not null )go select * from dept insert into dept values('教職部','') --1.創建存儲過程 查詢 create proc proc_dept@deptname varchar(20)asselect * from dept where deptname=@deptnamego--執行存儲過程exec proc_dept '教職部' --2.存儲過程 查詢create proc proc_dept2@deptname varchar(20)as exec('select * from dept where deptname='''+@deptname+'''')goproc_dept2 '教職部' --存儲過程 添加create proc proc_add_dept@deptname varchar(20),@remark varchar(20)asinsert into dept values(@deptname,@remark)goexec proc_add_dept '教職部','你懂得' --存儲過程刪除create proc proc_del_deptid@deptid varchar(20)as exec('delete from dept where deptid in('+@deptid+')')goproc_del_deptid '1,2' --查詢create proc proc_like_query_dept@deptname varchar(20),@remark varchar(20)as if @deptname <>'' and @remark <>'' begin select * from dept where deptname=@deptname and remark=@remark end else if @remark !='' and @deptname='' begin select * from dept where remark=@remark end else if @deptname!='' and @remark='' begin select * from dept where deptname=@deptname end else begin select * from dept end goexec proc_like_query_dept '','' --帶輸出參數create proc proc_set@deptid int outputas select @deptid= deptid from dept where deptname='學術部' and remark='這個不能還有點意思'go--定義輸出參數變量declare @deptid int --執行輸出參數 多個後面加逗號隔開exec proc_set @deptid output--輸出獲取的deptidprint '獲取的deptid是:'+ convert(varchar(10),@deptid) --帶有返回值的存儲過程create proc proc_returnas declare @deptcount int --查詢總條數 select @deptcount=COUNT(*) from dept return @deptcountgodeclare @deptcount intexec @deptcount=proc_return print '總條數是:'+convert(varchar(10),@deptcount) --條件 查詢create proc proc_query_like@like varchar(20)as--動態的構造sql語句declare @sql varchar(1024) set @sql='select * from dept where 1=1' set @sql=@sql+' and deptname like ''%'+@like+'%''' set @sql=@sql+'or remark like ''%'+@like+'%''' print @sql exec(@sql)goproc_query_like '了' --創建視圖/*1、視圖view (1)G 視圖是由一張或多張表的列組成的數據集,是一個虛擬表,也就是說:它不是以存儲數據的 方式存在的,而存儲的是一個查詢的SQL語言。 (2)為什麼使用視圖 一方面:視圖可以隱藏一些數據,限制用戶只能存取表內特定的列。 另一方面:將復雜的SQL語句封裝起來,便於理解和查詢。 (3)如何創建視圖 語法: create view 視圖名稱 as SQL語句 go (4)刪除視圖 if exists(select * from sysobjects where name='視圖名') drop view 視圖名 go (5)優點 P115 視點集中:用戶只能看到自己感興趣的內容,而看不到所引用表的其他數據,提高了數據的安全性。 簡化操作:視圖隱藏了表與表之間的關聯查詢,只用一條簡單的查詢視圖語句就可以搞定。 定制數據:視圖可以讓不同的用戶以不能的方式看到不同或相同的數據。 合並分割數據: 安全性:可以向表一樣授予訪問權限。是一種安全機制。 (6)注意項: 一個視圖只能包含一條SQL語句。即用一個視圖獲得多個結果集是不行的。 視圖同樣可以進行增、刪、改、查的操作,修改後的數據基礎表同步更新。*/create view view_deptasselect * from deptgoselect * from view_dept --索引 /* 2、索引index 為了提供查詢數據的效率,引人了索引機制。 生活例子:各種書的目錄。 (1)G 依賴與表建立,提供了編排表中數據的方法。是一個獨立的物理數據結構。 通常一個表的數據是存放在兩個頁面: 數據 存放在 數據頁 索引 存放在 索引頁 (2)類型 4 分四類:主鍵索引 聚集索引 clustered 非聚集索引 nonclustered 唯一索引 unique 主鍵索引:在一個表中定義主鍵的時候自動創建主鍵索引,是唯一索引的特殊類型。 要求每一個值都是唯一的。 聚集索引:按照數據在表中的排序和存儲 建立的索引 比如:字典的正文部分。 非聚集索引:類似於根據偏旁部首查漢字的過程。 聚集索引會影響數據的實際物理排序,在一張表中只能有一個; 非聚集索引不會影響數據的實際物理排序,在一張表中可以有多個。 唯一索引:通過唯一約束可以實現,可以是聚集索引,也可以是非聚集索引。 (3)如何創建索引 語法: create [unique|clustered|nonclustered] index 索引名稱 on 表名(列名) with fillfactor=數組[0-100] 注意:如果前面的關鍵字不寫,默認創建的是非聚集索引。 (4)刪除索引 if exists(select * from sysindexes where name='索引名') drop index 表名.索引名 go (5)調用索引 select * from 表名 with(index=索引名) [where...] (6)定義索引一般是在表中的數據很多的時候 (7)優缺點 P122 優點:大大提供查詢速度 缺點:索引需要占據物理空間,創建和維護索引耗費時間。 */ create nonclustered index index_depton dept(deptname)with fillfactor=50go select * from dept with(index=index_dept) --刪除索引drop index dept.index_dept