diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.20 \346\270\270\346\240\207.txt" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.20 \346\270\270\346\240\207.txt" new file mode 100644 index 0000000000000000000000000000000000000000..65706f81cdbd888737bc8c34114c1245edd192bb --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.20 \346\270\270\346\240\207.txt" @@ -0,0 +1,78 @@ +use STUDENTS +go + +--如何让游标装多列 + +declare mycur cursor scroll for (select * from StuInfo) + +open mycur + +fetch first from mycur +--循环遍历 学生所有信息 + +select * from tb_student +select * from tb_inf_student +select * from tb_bibliography +select * from tb_book +select * from tb_record + + +--- 创建学生游标,该游标包含(学生姓名,兴趣爱好,生源地,荣誉总数) +declare student cursor scroll for select name,hobby,ori_loca,prize from tb_student,tb_inf_student +open student +fetch first from student +close student +--- 循环遍历161开头的学生信息 +declare qwe cursor scroll for (select * from tb_student where stu_num like '161%') +declare @number nvarchar(20),@name varchar(20),@gender varchar(20),@birth varchar(20),@school varchar(20),@major varchar(20) +open qwe +fetch first from qwe + +while(@@FETCH_STATUS=0) +begin +print '学号:'+@number+' 姓名:'+@name+' gender:'+@gender+' 出生日期:'+@birth+' 学院:'+@school+' 专业:'+@major +fetch next from qwe into @number,@name,@gender,@birth,@school,@major +end +close qwe + + +--- 使用游标统计生源地为北京的荣誉总数 +declare qqq cursor scroll for (select prize from tb_inf_student where ori_loca like '北京') +declare @ji int = 0 +declare @sum int =0 +open qqq +fetch first from qqq into @ji +while(@@FETCH_STATUS=0) +begin +set @sum += @ji; +fetch next from qqq into @ji +end +close qqq +print' 数量:'+cast(@sum as varchar(10)) +deallocate qqq + +--- 合理使用游标和事务,让5-1号前借书的学生将图书归还 + +declare books cursor scroll for(select * from tb_record where borrow_time<'2019-05-01' and return_time is null) +open books +begin transaction + + declare @nums int=0 + update tb_record set return_time=GETDATE() where borrow_time<'2019-05-01'and return_time is null + set @nums += @@ERROR + +print @nums +if @nums>0 + begin + print '未归还' + rollback transaction + end +else + begin + print '已归还' + commit transaction + end + + +close books +select * from tb_record \ No newline at end of file diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.21 \345\207\275\346\225\260.txt" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.21 \345\207\275\346\225\260.txt" new file mode 100644 index 0000000000000000000000000000000000000000..c95492a499b6aae1ce4909d3d8e3c5bc5b111f86 --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.21 \345\207\275\346\225\260.txt" @@ -0,0 +1,60 @@ +--锛1锛夌紪鍐欎竴涓嚱鏁版眰璇ラ摱琛岀殑閲戦鎬诲拰 +go +create function banktotal() +returns decimal +as +begin + declare @sum decimal = (select sum(cardmoney) from BankCard) + return @sum +end +go +select dbo.banktotal() 閲戦鎬诲拰 + + +--锛2锛変紶鍏ヨ处鎴风紪鍙凤紝杩斿洖璐︽埛鐪熷疄濮撳悕 +go +create function Bankid(@id int) +returns varchar(5) +as +begin + declare @name varchar(5) = (select RealName from BankCard b join AccountInfo a on b.AccountId = a.AccountId where b.AccountId = @id) + return @name +end +go + +select dbo.Bankid(3)璐︽埛濮撳悕 + +--锛3锛変紶閫掑紑濮嬫椂闂村拰缁撴潫鏃堕棿锛岃繑鍥炰氦鏄撹褰曪紙瀛橀挶鍙栭挶锛夛紝浜ゆ槗璁板綍涓寘鍚 鐪熷疄濮撳悕锛屽崱鍙凤紝瀛橀挶閲戦锛屽彇閽遍噾棰濓紝浜ゆ槗鏃堕棿銆 +DROP function Exchange +go +create function Exchange(@start smalldatetime,@end smalldatetime) +returns @tableinfo table(Realname varchar(10),cardno varchar(20),MoneyInBank decimal,MoneyOutBank decimal,ExchangeTime date) +as +begin + insert into @tableinfo + select RealName,c.CardNo,MoneyInBank,MoneyOutBank,ExchangeTime from BankCard b join AccountInfo a on b.AccountId = a.AccountId join CardExchange c on b.CardNo = c.CardNo + where ExchangeTime between @start and @end + return +end +go + +select * from dbo.Exchange('2022-07-1','2022-09-30') + + +--鏂规涓锛堥昏緫澶嶆潅锛屽嚱鏁板唴瀹归櫎浜嗚繑鍥炵粨鏋滅殑sql璇彞杩樻湁鍏朵粬鍐呭锛屼緥濡傚畾涔夊彉閲忕瓑锛夛細 + +--锛4锛夋煡璇㈤摱琛屽崱淇℃伅锛屽皢閾惰鍗$姸鎬1,2,3,4鍒嗗埆杞崲涓烘眽瀛椻滄甯,鎸傚け,鍐荤粨,娉ㄩ攢鈥濓紝鏍规嵁閾惰鍗′綑棰濇樉绀洪摱琛屽崱绛夌骇 30涓囦互涓嬩负鈥滄櫘閫氱敤鎴封,30涓囧強浠ヤ笂涓"VIP鐢ㄦ埛"锛屽垎鍒樉绀哄崱鍙凤紝韬唤璇侊紝濮撳悕锛屼綑棰濓紝鐢ㄦ埛绛夌骇锛岄摱琛屽崱鐘舵併 + + + + +--鏂规涓锛氱洿鎺ュ湪sql璇彞涓娇鐢╟ase when + +--鏂规浜岋細灏嗙瓑绾у拰鐘舵佺敤鍑芥暟瀹炵幇 + +--锛5锛夌紪鍐欏嚱鏁帮紝鏍规嵁鍑虹敓鏃ユ湡姹傚勾榫勶紝骞撮緞姹傚疄宀侊紝渚嬪锛 + + + +--鈥 鐢熸棩涓2000-5-5锛屽綋鍓嶄负2018-5-4锛屽勾榫勪负17宀 +--鈥 鐢熸棩涓2000-5-5锛屽綋鍓嶄负2018-5-6锛屽勾榫勪负18宀 \ No newline at end of file diff --git "a/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.7\344\275\234\344\270\232.md" "b/05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.7\344\275\234\344\270\232.txt" similarity index 100% rename from "05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.7\344\275\234\344\270\232.md" rename to "05 \351\273\204\347\202\234\346\235\260/\344\275\234\344\270\232/9.7\344\275\234\344\270\232.txt" diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.15 \350\247\206\345\233\276.md" "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.15 \350\247\206\345\233\276.md" new file mode 100644 index 0000000000000000000000000000000000000000..d664e98a2ff94f50e7681faf82be8d5c60ad3db8 --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.15 \350\247\206\345\233\276.md" @@ -0,0 +1,76 @@ +### 浠涔堟槸瑙嗗浘锛 + +鍦 SQL 涓紝瑙嗗浘鏄熀浜 SQL 璇彞鐨勭粨鏋滈泦鐨勫彲瑙嗗寲鐨勮〃銆 + +瑙嗗浘鍖呭惈琛屽拰鍒楋紝灏卞儚涓涓湡瀹炵殑琛ㄣ傝鍥句腑鐨勫瓧娈靛氨鏄潵鑷竴涓垨澶氫釜鏁版嵁搴撲腑鐨勭湡瀹炵殑琛ㄤ腑鐨勫瓧娈点傛垜浠彲浠ュ悜瑙嗗浘娣诲姞 SQL 鍑芥暟銆乄HERE 浠ュ強 JOIN 璇彞锛屾垜浠篃鍙互鎻愪氦鏁版嵁锛屽氨鍍忚繖浜涙潵鑷簬鏌愪釜鍗曚竴鐨勮〃銆 + +**娉ㄩ噴锛**鏁版嵁搴撶殑璁捐鍜岀粨鏋勪笉浼氬彈鍒拌鍥句腑鐨勫嚱鏁般亀here 鎴 join 璇彞鐨勫奖鍝嶃 + +### SQL CREATE VIEW 璇硶 + +```sql +CREATE VIEW view_name AS +SELECT column_name(s) +FROM table_name +WHERE condition +``` + +**娉ㄩ噴锛**瑙嗗浘鎬绘槸鏄剧ず鏈杩戠殑鏁版嵁銆傛瘡褰撶敤鎴锋煡璇㈣鍥炬椂锛屾暟鎹簱寮曟搸閫氳繃浣跨敤 SQL 璇彞鏉ラ噸寤烘暟鎹 + +## SQL CREATE VIEW 瀹炰緥 + +鍙互浠庢煇涓煡璇㈠唴閮ㄣ佹煇涓瓨鍌ㄨ繃绋嬪唴閮紝鎴栬呬粠鍙︿竴涓鍥惧唴閮ㄦ潵浣跨敤瑙嗗浘銆傞氳繃鍚戣鍥炬坊鍔犲嚱鏁般乯oin 绛夌瓑锛屾垜浠彲浠ュ悜鐢ㄦ埛绮剧‘鍦版彁浜ゆ垜浠笇鏈涙彁浜ょ殑鏁版嵁銆 + +鏍锋湰鏁版嵁搴 Northwind 鎷ユ湁涓浜涜榛樿瀹夎鐨勮鍥俱傝鍥 "Current Product List" 浼氫粠 Products 琛ㄥ垪鍑烘墍鏈夋鍦ㄤ娇鐢ㄧ殑浜у搧銆傝繖涓鍥句娇鐢ㄤ笅鍒 SQL 鍒涘缓锛 + +```sql +CREATE VIEW [Current Product List] AS +SELECT ProductID,ProductName +FROM Products +WHERE Discontinued=No +``` + +鎴戜滑鍙互鏌ヨ涓婇潰杩欎釜瑙嗗浘锛 + + + +```sql +SELECT * FROM [Current Product List] +``` + +Northwind 鏍锋湰鏁版嵁搴撶殑鍙︿竴涓鍥句細閫夊彇 Products 琛ㄤ腑鎵鏈夊崟浣嶄环鏍奸珮浜庡钩鍧囧崟浣嶄环鏍肩殑浜у搧锛 + +```sql +CREATE VIEW [Products Above Average Price] AS +SELECT ProductName,UnitPrice +FROM Products +WHERE UnitPrice>(SELECT AVG(UnitPrice) FROM Products) +``` + +鎴戜滑鍙互鍍忚繖鏍锋煡璇笂闈㈣繖涓鍥撅細 + +```sql +SELECT * FROM [Products Above Average Price] +``` + +鍙︿竴涓潵鑷 Northwind 鏁版嵁搴撶殑瑙嗗浘瀹炰緥浼氳绠楀湪 1997 骞存瘡涓绫荤殑閿鍞绘暟銆傝娉ㄦ剰锛岃繖涓鍥句細浠庡彟涓涓悕涓 "Product Sales for 1997" 鐨勮鍥鹃偅閲岄夊彇鏁版嵁锛 + +```sql +CREATE VIEW [Category Sales For 1997] AS +SELECT DISTINCT CategoryName,Sum(ProductSales) AS CategorySales +FROM [Product Sales for 1997] +GROUP BY CategoryName +``` + +鎴戜滑鍙互鍍忚繖鏍锋煡璇笂闈㈣繖涓鍥撅細 + +```sql +SELECT * FROM [Category Sales For 1997] +``` + +鎴戜滑涔熷彲浠ュ悜鏌ヨ娣诲姞鏉′欢銆傜幇鍦紝鎴戜滑浠呬粎闇瑕佹煡鐪 "Beverages" 绫荤殑鍏ㄩ儴閿閲忥細 + +```sql +SELECT * FROM [Category Sales For 1997] +WHERE CategoryName='Beverages' +``` \ No newline at end of file diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.19 \344\272\213\345\212\241.md" "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.19 \344\272\213\345\212\241.md" new file mode 100644 index 0000000000000000000000000000000000000000..d86f85ca38bf7e28ca2505654922ded620232a1b --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.19 \344\272\213\345\212\241.md" @@ -0,0 +1,45 @@ +## 浜嬪姟 + +#### 浠涔堟槸浜嬪姟 + +**浜嬪姟锛 Transaction锛夌敱涓娆℃垨鑰呭娆″熀鏈搷浣滄瀯鎴愶紝鎴栬呰锛屼簨鍔$敱涓鏉℃垨鑰呭鏉 SQL 璇彞鏋勬垚銆** + +**浜嬪姟涓殑鎵鏈 SQL 璇彞鏄竴涓暣浣擄紝鍏卞悓杩涢锛屼笉鍙垎鍓诧紝瑕佷箞鍏ㄩ儴鎵ц鎴愬姛锛岃涔堝叏閮ㄦ墽琛屽け璐ャ** + +#### 浜嬪姟鐨勫睘鎬(ACID) + +涓鑸潵璇达紝浜嬪姟鍏锋湁鍥涗釜鏍囧噯灞炴э紝鍒嗗埆鏄師瀛愭э紙**A**tomicity锛屾垨绉颁笉鍙垎鍓叉э級銆佷竴鑷存э紙**C**onsistency锛夈侀殧绂绘э紙**I**solation锛屽張绉扮嫭绔嬫э級銆佹寔涔呮э紙**D**urability锛夛紝绠绉 **ACID**銆傚叿浣撹鏄庡涓嬶細 + +##### 1) 鍘熷瓙鎬 + +涓涓簨鍔′腑鐨勬墍鏈 SQL 璇彞锛岃涔堝叏閮ㄦ墽琛屾垚鍔燂紝瑕佷箞鍏ㄩ儴鎵ц澶辫触锛屼笉浼氱粨鏉熷湪涓棿鐨勬煇涓幆鑺傘備簨鍔″湪鎵ц杩囩▼涓彂鐢熼敊璇紝浼氳鍥炴粴锛圧ollback锛夊埌浜嬪姟寮濮嬪墠鐨勭姸鎬侊紝灏卞儚杩欎釜浜嬪姟浠庢潵娌℃湁鎵ц杩囦竴鏍枫 + +##### 2) 涓鑷存 + +鍦ㄤ簨鍔″紑濮嬩箣鍓嶅拰浜嬪姟缁撴潫浠ュ悗锛屾暟鎹簱鐨勫畬鏁存ф病鏈夎鐮村潖銆傝繖琛ㄧず鍐欏叆鐨勬暟鎹繀椤诲畬鍏ㄧ鍚堟墍鏈夌殑棰勮瑙勫垯锛屽叾涓寘鍚暟鎹殑绮剧‘搴︺佷覆鑱旀т互鍙婂悗缁暟鎹簱鍙互鑷彂鎬у湴瀹屾垚棰勫畾鐨勫伐浣溿 + +##### 3) 闅旂鎬 + +鏁版嵁搴撳厑璁稿涓苟鍙戜簨鍔″悓鏃跺鍏舵暟鎹繘琛岃鍐欏拰淇敼鐨勮兘鍔涳紝闅旂鎬у彲浠ラ槻姝㈠涓簨鍔″苟鍙戞墽琛屾椂鐢变簬浜ゅ弶鎵ц鑰屽鑷存暟鎹殑涓嶄竴鑷淬備簨鍔¢殧绂诲垎涓轰笉鍚岀骇鍒紝鍖呮嫭璇绘湭鎻愪氦锛圧ead uncommitted锛夈佽鎻愪氦锛坮ead committed锛夈佸彲閲嶅璇伙紙repeatable read锛夊拰涓茶鍖栵紙Serializable锛夈 姝婚攣 鎿嶄綔绯荤粺 + +##### 4) 鎸佷箙鎬 + +浜嬪姟澶勭悊缁撴潫鍚庯紝瀵规暟鎹殑淇敼灏辨槸姘镐箙鐨勶紝鍗充究绯荤粺鏁呴殰涔熶笉浼氫涪澶便 + +### 浜嬪姟鐨勬祦绋 + +1. ##### 寮濮嬩簨鍔★細BEGIN TRANSACTION + + 浜嬪姟寮濮嬪悗锛岀洿鎺ユ墽琛屼唬鐮侊紝閫氬父鍦ㄤ慨鏀硅〃鐨勪唬鐮佽鍚庝細鎻掑叆鍏ㄥ眬鍙橀噺锛園ERROR锛夎繘琛岄敊璇唬鐮佺殑鍒ゆ柇锛屼竴鑸細瀹氫箟鍙橀噺鏉ヨ閿欒浠g爜锛園ERROR锛夛紝鍦ㄦ墽琛屼唬鐮佸悗锛屼細鐢╥f杩涜鍒ゆ柇 + + @ERROR鏄惁涓0锛岃嫢涓0鍒欐彁浜や簨鍔★紝鍙嶄箣鍥炴粴 + +2. ##### 鎻愪氦浜嬪姟锛欳OMMIT TRANSACTION + + 褰撲唬鐮佸潡鏃犻敊璇椂锛岀洿鎺ユ墽琛屼唬鐮佸潡 + +3. ##### 鍥炴粴浜嬪姟锛歊OLLBACK TRANSACTION + + 褰撲唬鐮佸潡鏈夐敊璇椂锛岃繑鍥炰互涓婅嚦begin涔嬮棿宸叉墽琛岀殑浠g爜銆 + +4. ##### 瀛樺偍鐐硅鍙ワ細SAVE TRANSACTION \ No newline at end of file diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.20 \346\270\270\346\240\207.md" "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.20 \346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..f628259245fab679bb595239572cad4ec67d14a6 --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.20 \346\270\270\346\240\207.md" @@ -0,0 +1,124 @@ +**1.1娓告爣鐨勬蹇** + +銆銆娓告爣(Cursor)瀹冧娇鐢ㄦ埛鍙愯璁块棶鐢盨QL Server杩斿洖鐨勭粨鏋滈泦銆備娇鐢ㄦ父鏍(cursor)鐨勪竴涓富瑕佺殑鍘熷洜灏辨槸鎶婇泦鍚堟搷浣滆浆鎹㈡垚鍗曚釜璁板綍澶勭悊鏂瑰紡銆傜敤SQL璇█浠庢暟鎹簱涓绱㈡暟鎹悗锛岀粨鏋滄斁鍦ㄥ唴瀛樼殑涓鍧楀尯鍩熶腑锛屼笖缁撴灉寰寰鏄竴涓惈鏈夊涓褰曠殑闆嗗悎銆傛父鏍囨満鍒跺厑璁哥敤鎴峰湪SQL server鍐呴愯鍦拌闂繖浜涜褰曪紝鎸夌収鐢ㄦ埛鑷繁鐨勬剰鎰挎潵鏄剧ず鍜屽鐞嗚繖浜涜褰曘 + +銆銆**1.2 娓告爣鐨勪紭鐐** + +銆銆浠庢父鏍囧畾涔夊彲浠ュ緱鍒版父鏍囩殑濡備笅浼樼偣锛岃繖浜涗紭鐐逛娇娓告爣鍦ㄥ疄闄呭簲鐢ㄤ腑鍙戞尌浜嗛噸瑕佷綔鐢細 + +銆銆1)鍏佽绋嬪簭瀵圭敱鏌ヨ璇彞select杩斿洖鐨勮闆嗗悎涓殑姣忎竴琛屾墽琛岀浉鍚屾垨涓嶅悓鐨勬搷浣滐紝鑰屼笉鏄鏁翠釜琛岄泦鍚堟墽琛屽悓涓涓搷浣溿 + +銆銆2)鎻愪緵瀵瑰熀浜庢父鏍囦綅缃殑琛ㄤ腑鐨勮杩涜鍒犻櫎鍜屾洿鏂扮殑鑳藉姏銆 + +銆銆3)娓告爣瀹為檯涓婁綔涓洪潰鍚戦泦鍚堢殑鏁版嵁搴撶鐞嗙郴缁(RDBMS)鍜岄潰鍚戣鐨勭▼搴忚璁′箣闂寸殑妗ユ锛屼娇杩欎袱绉嶅鐞嗘柟寮忛氳繃娓告爣娌熼氳捣鏉ャ + +銆銆**1.3 娓告爣鐨勪娇鐢** + +銆銆璁蹭簡杩欎釜澶氭父鏍囩殑浼樼偣锛岀幇鍦ㄦ垜浠氨浜茶嚜鏉ユ彮寮娓告爣鐨勭绉樼殑闈㈢罕銆 + +銆銆浣跨敤娓告爣鐨勯『搴忥細 澹板悕娓告爣銆佹墦寮娓告爣銆佽鍙栨暟鎹佸叧闂父鏍囥佸垹闄ゆ父鏍囥 + +銆銆**1.3.1澹版槑娓告爣** + +銆銆鏈绠鍗曟父鏍囧0鏄庯細DECLARE <娓告爣鍚>CURSOR FOR; + +銆銆鍏朵腑select璇彞鍙互鏄畝鍗曟煡璇紝涔熷彲浠ユ槸澶嶆潅鐨勬帴杩炴煡璇㈠拰宓屽鏌ヨ + +銆銆渚嬪瓙锛歔宸茶〃2 AddSalary涓轰緥瀛怾 + +銆銆Declare mycursor cursor for select * from AddSalary 杩欐牱鎴戝氨瀵硅〃AddSalary鐢虫槑浜嗕竴涓父鏍噈ycursor + +銆銆銆愰珮绾у娉ㄣ + +銆銆DECLARE <娓告爣鍚> [INSENSITIVE] [SCROLL] CURSORFOR 杩欓噷鎴戣涓涓嬫父鏍囦腑绾у簲鐢ㄤ腑鐨刐INSENSITIVE]鍜孾SCROLL] + +銆銆INSENSITIVE + +銆銆琛ㄦ槑MS SQL SERVER 浼氬皢娓告爣瀹氫箟鎵閫夊彇鍑烘潵鐨勬暟鎹褰曞瓨鏀惧湪涓涓存椂琛ㄥ唴(寤虹珛鍦╰empdb 鏁版嵁搴撲笅)銆傚璇ユ父鏍囩殑璇诲彇鎿嶄綔鐨嗙敱涓存椂琛ㄦ潵搴旂瓟銆傚洜姝わ紝瀵瑰熀鏈〃鐨勪慨鏀瑰苟涓嶅奖鍝嶆父鏍囨彁鍙栫殑鏁版嵁锛屽嵆娓告爣涓嶄細闅忕潃鍩烘湰琛ㄥ唴瀹圭殑鏀瑰彉鑰屾敼鍙橈紝鍚屾椂涔熸棤娉曢氳繃娓告爣鏉ユ洿鏂板熀鏈〃銆傚鏋滀笉浣跨敤璇ヤ繚鐣欏瓧锛岄偅涔堝鍩烘湰琛ㄧ殑鏇存柊銆佸垹闄ら兘浼氬弽鏄犲埌娓告爣涓 + +銆銆鍙﹀搴旇鎸囧嚭锛屽綋閬囧埌浠ヤ笅鎯呭喌鍙戠敓鏃讹紝娓告爣灏嗚嚜鍔ㄨ瀹欼NSENSITIVE 閫夐」銆 + +銆銆a.鍦⊿ELECT 璇彞涓娇鐢―ISTINCT銆 GROUP BY銆 HAVING UNION 璇彞; + +銆銆b.浣跨敤OUTER JOIN; + +銆銆c.鎵閫夊彇鐨勪换鎰忚〃娌℃湁绱㈠紩; + +銆銆d.灏嗗疄鏁板煎綋浣滈夊彇鐨勫垪銆 + +銆銆SCROLL + +銆銆琛ㄦ槑鎵鏈夌殑鎻愬彇鎿嶄綔(濡侳IRST銆 LAST銆 PRIOR銆 NEXT銆 RELATIVE銆 ABSOLUTE)閮藉彲鐢ㄣ傚鏋滀笉浣跨敤璇ヤ繚鐣欏瓧锛岄偅涔堝彧鑳借繘琛孨EXT 鎻愬彇鎿嶄綔銆傜敱姝ゅ彲瑙侊紝SCROLL 鏋佸ぇ鍦板鍔犱簡鎻愬彇鏁版嵁鐨勭伒娲绘э紝鍙互闅忔剰璇诲彇缁撴灉闆嗕腑鐨勪换涓琛屾暟鎹褰曪紝鑰屼笉蹇呭叧闂啀閲嶅紑娓告爣銆 + +銆銆**1.3.2 鎵撳紑娓告爣** + +銆銆闈炲父绠鍗曪紝鎴戜滑灏辨墦寮鍒氭墠鎴戜滑澹版槑鐨勬父鏍噈ycursor + +銆銆OPEN mycursor + +銆銆**1.3.3璇诲彇鏁版嵁** + +FETCH [ NEXT | PRIOR | FIRST | LAST] FROM { 娓告爣鍚 | @娓告爣鍙橀噺鍚 } [ INTO @鍙橀噺鍚 [锛屸 ] + +銆銆鍙傛暟璇存槑锛 + +銆銆NEXT 鍙栦笅涓琛岀殑鏁版嵁锛屽苟鎶婁笅涓琛屼綔涓哄綋鍓嶈(閫掑)銆傜敱浜庢墦寮娓告爣鍚庯紝琛屾寚閽堟槸鎸囧悜璇ユ父鏍囩1琛屼箣鍓嶏紝鎵浠ョ涓娆℃墽琛孎ETCH NEXT鎿嶄綔灏嗗彇寰楁父鏍囬泦涓殑绗1琛屾暟鎹侼EXT涓洪粯璁ょ殑娓告爣鎻愬彇閫夐」銆 + +銆銆INTO @鍙橀噺鍚峓,鈥 鎶婃彁鍙栨搷浣滅殑鍒楁暟鎹斁鍒板眬閮ㄥ彉閲忎腑銆傚垪琛ㄤ腑鐨勫悇涓彉閲忎粠宸﹀埌鍙充笌娓告爣缁撴灉闆嗕腑鐨勭浉搴斿垪鐩稿叧鑱斻傚悇鍙橀噺鐨勬暟鎹被鍨嬪繀椤讳笌鐩稿簲鐨勭粨鏋滃垪鐨勬暟鎹被鍨嬪尮閰嶆垨鏄粨鏋滃垪鏁版嵁绫诲瀷鎵鏀寔鐨勯殣鎬ц浆鎹€傚彉閲忕殑鏁扮洰蹇呴』涓庢父鏍囬夋嫨鍒楄〃涓殑鍒楃殑鏁扮洰涓鑷淬 + +銆銆**1.3.5鍒犻櫎娓告爣** + +銆銆DEALLOCATE mycursor + +銆銆**1.3.6 瀹炰緥璁粌** + +銆銆濡備笂鎴戜粙缁嶅畬浜嗘父鏍囦娇鐢ㄧ殑5涓楠わ紝閭g幇鍦ㄦ垜浠氨鏉ヤ笂涓婃墜锛岀粌涔犵敤娓告爣鍙栧嚭琛2 AddSalary鐨勬暟鎹 + +銆銆涓轰簡杩愯鎴戜滑鑷繁鍒涘缓鐨勬父鏍囷紝鎴戜滑灏嗘父鏍囧啓鍦ㄥ瓨鍌ㄨ繃绋嬮噷锛屾柟渚挎垜浠湅鍒版父鏍囩殑鏁翠釜浣跨敤杩囩▼銆 + +銆銆銆 + +闄勶細娓告爣浣跨敤鏂规硶浣跨敤娓告爣蹇呴』缁忓巻浜斾釜姝ラ锛 + +鈶犲畾涔夋父鏍囷細delare + +鈶℃墦寮娓告爣锛歰pen + +鈶㈤愯鎻愬彇娓告爣闆嗕腑鐨勮锛歠etch + +鈶e叧闂父鏍囷細close + +鈶ら噴鏀炬父鏍囷細Deallocate + +1銆佽娉曪細 + +1 鈶燿eclare cursor_name cursor for SQL鏌ヨ + +2 [for [read only|update {of column-name list}] + +3 缂虹渷update + +4 鈶pen curser_name + +5 鈶etch curser_name [into 鍙橀噺琛╙ + +6 褰撴父鏍囩Щ鑷冲熬閮紝涓嶅彲浠ュ啀璇诲彇娓告爣锛屽繀椤诲叧闂父鏍囩劧鍚庨噸鏂版墦寮娓告爣銆 + +7 鍙互閫氳繃妫鏌ュ叏灞鍙橀噺@@fetch_status鏉ュ垽鏂槸鍚﹀凡璇诲畬娓告爣闆嗕腑鎵鏈夎銆 + +8 鈶lose curser_name + +9 鈶eallocate curser_name. + + + +2銆佸垹闄ゆ父鏍囬泦涓綋鍓嶈 + +Delete from 琛ㄥ悕 where current of curser_name + +浠庢父鏍囦腑鍒犻櫎涓琛屽悗锛屾父鏍囧畾浣嶄簬琚垹闄ょ殑娓告爣涔嬪悗鐨勪竴琛岋紝蹇呴』鍐嶇敤fetch寰楀埌璇ヨ銆 + +3銆佹洿鏂版父鏍囬泦涓綋鍓嶈 + +update 琛ㄥ悕 set 鍒楀悕=琛ㄨ揪寮 [锛屽垪鍚=琛ㄨ揪寮廬 +where current of curser_name \ No newline at end of file diff --git "a/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.21 \345\207\275\346\225\260.md" "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.21 \345\207\275\346\225\260.md" new file mode 100644 index 0000000000000000000000000000000000000000..da1d900cc7572f584109ff9923005bb7a5ca8c34 --- /dev/null +++ "b/05 \351\273\204\347\202\234\346\235\260/\347\254\224\350\256\260/9.21 \345\207\275\346\225\260.md" @@ -0,0 +1,114 @@ +# 鍑芥暟 + +鍑芥暟鍒嗕负 + +- 锛1锛夌郴缁熷嚱鏁: +- 锛2锛夎嚜瀹氫箟鍑芥暟(鏂规硶锛氬皢涓涓姛鑳藉皝瑁呮垚鍙噸鐢ㄧ殑鍑芥暟)銆 + +鍏朵腑鑷畾涔夊嚱鏁板張鍙互鍒嗕负 + +- 锛1锛夋爣閲忓煎嚱鏁(杩斿洖鍗曚釜鍊硷級 +- (2锛夎〃鍊煎嚱鏁帮紙杩斿洖鏌ヨ缁撴灉锛 + +鍖哄埆 + +- 琛ㄥ煎嚱鏁拌繑鍥炵殑鏄竴寮犺〃缁撴灉,灏卞拰涓涓猻elect鏌ヨ璇彞涓鏍,鍙笉杩囬噷闈㈠甫鍏ヤ簡鍙傛暟 +- 鏍囬噺鍊煎嚱鏁拌繑鍥炵殑鍙槸涓涓 + +### 涓銆佽〃鍊煎嚱鏁板張鍒嗕负鍐呰仈鍑芥暟涓庡璇彞鍑芥暟 + +##### (1)鍐呰仈鍑芥暟灏辨槸娌℃湁鍑芥暟涓讳綋鏄崟涓猻elect + +``` +涓嶅甫杈撳叆鍙傛暟鐨勮〃鍊煎嚱鏁 +create function tvpoints() +returns table +as +return +( +select * from tb_users +); +``` + +select * from tvpoints()杩欎釜缁撴灉杩斿洖鐨勬槸涓涓〃 + +##### (2)甯﹀弬鐨勫唴鑱旇〃鍊煎嚱鏁 + +``` +瀵逛簬澶氳鍙ヨ〃鍊煎嚱鏁,鍦˙egin...End璇彞鍧椾腑瀹氫箟鐨勫嚱鏁颁綋鍖呭惈涓绯诲垪Transact-SQL璇彞,杩欎簺璇彞鍙敓鎴愯骞跺皢鍏舵彃鍏ュ皢杩斿洖鐨勮〃涓. +create function tvpoints() +returns @points table (x float,y float) +as begin +insert @points values(1,2); +insert @points values(3,4); +returns; +end +``` + +select * from tvpoints2(x,y)鏌ヨ鍒扮殑鏄竴寮犺〃 + +##### (3)鏍囬噺鍑芥暟(杩斿洖涓涓叿浣撶被鍨嬬殑鍊艰屼笉鏄竴寮犺〃) + +``` +create function FUN_DataFormat(@strDate datetime) +Returns varchar(20) as +begin + declare @date varchar(20) + set @date=Datename(YY,@strDate)+'骞'+Convert(varchar,month(@strDate))+'鏈'+Convert(Varchar,Day(@strDate))+'鏃' + return @date + end +``` + +鍙互閫氳繃select abo.fun_DataFormat(getdate())鏉ヤ娇鐢.(鐢ㄧ殑鏃跺欎竴瀹氳鍦ㄥ嚱鏁板墠闈㈡坊鍔犱竴涓猟bo鎴栬呯殑璇濇暟鎹簱璇彞鎶ラ敊鐨勪細鎻愮ず涓嶈璇嗙殑) + +##### 鍒犻櫎鑷畾涔夊嚱鏁 + +``` +DROP function 鍑芥暟鍚 +``` + +# 璇硶缁撴瀯 + +#### 鏍囬噺鍊煎嚱鏁 + +``` +CREATE FUNCTION function_name(@parameter_name parameter_data_type) --锛園鍙傛暟鍚 鍙傛暟鐨勬暟鎹被鍨嬶級 +RETURNS date_type --杩斿洖杩斿洖鍊肩殑鏁版嵁绫诲瀷 + +[WITH ENCRYPTION] --濡傛灉鎸囧畾浜 encryption 鍒欏嚱鏁拌鍔犲瘑 + +[AS] + +BEGIN + + function_body --鍑芥暟浣 + + RETURN 琛ㄨ揪寮; + +END +``` + + + +#### 琛ㄥ煎嚱鏁 + +``` +create function 鍚嶇О + +([{@鍙傛暟鍚嶇О 鍙傛暟绫诲瀷[=榛樿鍊糫}[,n]]) + +returns @灞閮ㄥ彉閲 table锛堝弬鏁板悕 鍙傛暟绫诲瀷锛 + +[with encryption] + +[as] + +begin + +鍑芥暟浣 + +return 鍑芥暟杩斿洖鍊 + +end +``` +