From 1f3fc99e6700ce5217500a637ad6299c41443843 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E9=99=86=E5=BB=BA=E9=94=8B?= <467466356@qq.com> Date: Wed, 5 Oct 2022 20:32:03 +0800 Subject: [PATCH] =?UTF-8?q?2022-09-30=E7=AC=AC=E4=B9=9D=E6=AC=A1=E4=BD=9C?= =?UTF-8?q?=E4=B8=9A=E6=B8=B8=E6=A0=87?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ...4\344\270\232\346\270\270\346\240\207.sql" | 64 ++++++++++ ...24\350\256\260\346\270\270\346\240\207.md" | 109 ++++++++++++++++++ 2 files changed, 173 insertions(+) create mode 100644 "39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\344\275\234\344\270\232\346\270\270\346\240\207.sql" create mode 100644 "39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\347\254\254\344\271\235\346\254\241\347\254\224\350\256\260\346\270\270\346\240\207.md" diff --git "a/39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\344\275\234\344\270\232\346\270\270\346\240\207.sql" "b/39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\344\275\234\344\270\232\346\270\270\346\240\207.sql" new file mode 100644 index 0000000..e2c64ef --- /dev/null +++ "b/39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\344\275\234\344\270\232\346\270\270\346\240\207.sql" @@ -0,0 +1,64 @@ +USE test_trigger +go +--例3:使用游标实现加薪操 +declare cur_UpdateSalaryById cursor scroll +for select PeopleId from People + +open cur_UpdateSalaryById + +declare @id int +declare @mon money =100 +fetch first from cur_UpdateSalaryById into @id +while (@@FETCH_STATUS = 0) + begin + update people set peoplesalary +=@mon where peopleid = @id + print cast(@id as varchar(2)) + char(9) + cast(@mon as varchar(10)) + fetch next from cur_UpdateSalaryById into @id + end + +close cur_UpdateSalaryById + +deallocate cur_UpdateSalaryById + +select * from People + +--例4:使用游标删除不达标员工 +declare cur_fai cursor scroll +for select PeopleId from People +open cur_fai +declare @card int +fetch first from cur_fai into @card +while (@@FETCH_STATUS = 0) + begin + declare @money int = (select PeopleSalary from people where peopleId = @card) + + if(@money<5000) + begin + delete People where PeopleId = @card + end + fetch next from cur_fai into @card + end + +close cur_fai + +deallocate cur_fai +select * from People + + + +--使用游标 实现:如果A表与B表中ID字段值相同,那么将B表中的省份,城市 修改成与A表中的城市一致(连表) +select * from A +select * from B +declare cur_id cursor scroll +for select A.* from A inner join B on A.id = B.id +open cur_id +declare @ida int , @id1 int,@Province varchar(10),@City varchar(10) +fetch first from cur_id into @ida,@Province,@City +while(@@FETCH_STATUS = 0) + begin + update B set B.Province = @Province , B.City = @City where B.id = @ida + fetch next from cur_id into @ida,@Province,@City + end + +close cur_id +deallocate cur_id diff --git "a/39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\347\254\254\344\271\235\346\254\241\347\254\224\350\256\260\346\270\270\346\240\207.md" "b/39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\347\254\254\344\271\235\346\254\241\347\254\224\350\256\260\346\270\270\346\240\207.md" new file mode 100644 index 0000000..d314b47 --- /dev/null +++ "b/39\351\231\206\345\273\272\351\224\213/2022-09-30\347\254\254\344\271\235\346\254\241\344\275\234\344\270\232\346\270\270\346\240\207/2022-09-30\347\254\254\344\271\235\346\254\241\347\254\224\350\256\260\346\270\270\346\240\207.md" @@ -0,0 +1,109 @@ +涓銆佹父鏍囩殑姒傚康鐭ヨ瘑 + +娓告爣鍙互鐞嗚В涓篠QL Server鐨勪竴绉嶆暟鎹闂満鍒讹紝瀹冨厑璁哥敤鎴疯闂暟鎹殑缁村害鏄暟鎹銆傜敤鎴峰彲浠ュ姣忎竴琛屾暟鎹繘琛屽崟鐙鐞嗭紝浠庤岄檷浣庣郴缁熷紑閿鍜屾綔鍦ㄧ殑闃婚殧鎯呭喌锛 + +娓告爣涓昏鐢ㄤ簬瀛樺偍杩囩▼锛岃Е鍙戝櫒鍜 T_SQL澶嶆潅鐨勮剼鏈腑锛屽畠鑳戒娇鏌ヨ缁撴灉闆嗙殑鏁版嵁鐢ㄤ簬鍏跺畠T_SQL璇彞銆傚湪鏌ョ湅鎴栧鐞嗙粨鏋滈泦涓悜鍓嶆垨鍚戝悗娴忚姣忎竴琛屾暟鎹殑鍔熻兘銆備笌C璇█涓殑鎸囬拡鍔熻兘鏈変簺鐩镐技锛屽畠鍙互鎸囧悜缁撴灉闆嗕腑鐨勪换鎰忎綅缃紝濡傛灉瑕佸缁撴灉闆嗚繘琛岄愯鍗曠嫭澶勭悊鏃讹紝蹇呴』澹版槑涓涓寚鍚戣缁撴灉闆嗕腑鐨勬父鏍囧彉閲忋 + +SQL Server 涓殑鏁版嵁鎿嶄綔缁撴灉閮芥槸闈㈠悜闆嗗悎鐨勶紝骞舵病鏈変竴绉嶆弿杩拌〃涓崟涓璁板綍鐨勮〃杈惧舰寮忥紝闄ら潪浣跨敤WHERE瀛愬彞闄愬畾鏌ヨ缁撴灉锛屼娇鐢ㄦ父鏍囧彲浠ヨˉ鍏呰繖绉嶅姛鑳斤紝骞朵笖娓告爣鐨勪娇鐢ㄥ拰鎿嶄綔杩囩▼鏇村姞鐏垫椿銆 + +娓告爣鐨勭敓鍛藉懆鏈燂細澹版槑娓告爣鈫掓墦寮娓告爣鈫掕鍙栨暟鎹啋鍏抽棴娓告爣鈫掗噴鏀炬父鏍囥 + +浜屻佹父鏍囩殑璇硶鏍煎紡 + +DECLARE cursor_name CURSOR [ LOCAL | GLOBAL] + +[ FORWARD_ONLY | SCROLL ] + +[ STATIC | KEYSET | DYNAMIC | FAST_FORWARD ] + +[ READ_ONLY | SCROLL_LOCKS | OPTIMISTIC ] + +[ TYPE_WARNING ] + +FOR select_statement + +[ FOR UPDATE [ OF column_name [,...n] ] ] + +鍙傛暟璇存槑锛 + +cursor_name:鏄墍瀹氫箟鐨勬父鏍囩殑鍚嶇О銆 + +LOCAL锛氬浜庡湪鍏朵腑鍒涘缓鎵瑰鐞嗐佸瓨鍌ㄨ繃绋嬫垨瑙﹀彂鍣ㄦ潵璇达紝璇ユ父鏍囩殑浣滅敤鍩熸槸灞閮ㄧ殑銆 + +GLOBAL锛氭寚瀹氳娓告爣鐨勪綔鐢ㄥ煙鏄叏灞鐨 + +FORWARD_ONLY:鎸囧畾娓告爣鍙兘浠庣涓琛屾粴鍔ㄥ埌鏈鍚庝竴琛屻侳ETCH NEXT鏄敮涓鏀寔鐨勬暟鎹鍙栭夐」锛屽鏋滃湪鎸囧畾FORWARD_ONLY鏃朵笉鎸囧畾STATIC锛孠EYSET鍜孌YNAMIC鍏抽敭瀛楋紝鍒欐父鏍囦綔涓篋YNAMIC娓告爣杩涜鎿嶄綔锛屽鏋淔ORWARD_ONLY鍜孲CROLL鍧囦负鎸囧畾锛屽垯闄ら潪鎸囧畾STATIC锛孠EYSET鍜孌YNAMIC鍏抽敭瀛楋紝鍚﹀垯榛樿涓篎ORWARD_ONLY銆係TATIC锛孠EYSET鍜孌YNAMIC娓告爣榛樿涓篠CROLL銆備笌ODBC鍜孉DO杩欑被鏁版嵁搴揂PI涓嶅悓锛孲TATIC锛孠EYSET鍜孌YNAMIC T_SQL娓告爣鏀寔FORWARD_ONLY銆 + +STATIC锛氬畾涔変竴涓父鏍囷紝浠ュ垱寤哄皢璇ユ父鏍囦娇鐢ㄧ殑鏁版嵁涓存椂澶嶆湰锛屽娓告爣鐨勬墍鏈夎姹傞兘浠巘empdb涓殑涓存椂琛ㄤ腑涓嶅緱鍒板簲绛旓紱鍥犳锛屽湪瀵硅娓告爣杩涜鎻愬彇鎿嶄綔鏃惰繑鍥炵殑鏁版嵁涓笉鍙嶆槧瀵瑰熀琛ㄦ墍鍋氱殑淇敼锛屽苟涓旇娓告爣涓嶅厑璁镐慨鏀广 + +KEYSET:鎸囧畾褰撴父鏍囨墦寮鏃讹紝娓告爣閲嶅鐨勮鐨勬垚鍛樿韩浠藉拰椤哄簭宸茬粡鍥哄畾銆傚琛岃繘琛屽敮涓鏍囪瘑鐨勯敭鍊煎唴缃湪tempdb鍐呬竴涓О涓簁eyset鐨勮〃涓 + +DYNAMIC:瀹氫箟涓涓父鏍囷紝浠ュ弽鏄犲湪婊氬姩娓告爣鏃跺缁撴灉闆嗗唴鐨勫悇琛屾墍鍋氱殑鎵鏈夋暟鎹洿鏀广傝鐨勬暟鎹笺侀『搴忓拰鎴愬憳韬唤鍦ㄦ瘡娆℃彁鍙栨椂閮戒細鏇存敼锛屽姩鎬佹父鏍囦笉鏀寔ABSOLUTE鎻愬彇閫夐」銆 + +FAST_FORWARD锛氭寚瀹氬惎鍔ㄤ簡鎬ц兘浼樺寲鐨凢ORWARD_ONLY銆丷EAD_ONLY娓告爣銆傚鏋滄寚瀹氫簡SCROLL鎴朏OR_UPDATE,鍒欎笉鑳芥寚瀹欶AST_FORWARD銆 + +SCROLL_LOCKS锛氭寚瀹氶氳繃娓告爣杩涜鐨勫畾浣嶆洿鏂版垨鍒犻櫎涓瀹氫細鎴愬姛銆傚皢琛岃鍏ユ父鏍囨椂SQL Server灏嗛攣瀹氳繖浜涜锛屼互纭繚闅忓悗鍙瀹冧滑杩涜淇敼锛屽鏋滆繕鎸囧畾浜咶AST_FORWARD鎴朣TATIC锛屽垯涓嶈兘鎸囧畾SCROLL_LOCKS銆 + +OPTIMISTIC锛氭寚瀹氬鏋滆鑷鍏ユ父鏍囦互鏉ュ凡寰楀埌鏇存柊锛屽垯閫氳繃娓告爣杩涜鐨勫畾浣嶆洿鏂版垨瀹氫綅鍒犻櫎涓嶆垚鍔熴傚綋灏嗚璇诲叆娓告爣鏃讹紝SQL Server涓嶉攣瀹氳锛屽畠鏀圭敤timestamp鍒楀兼瘮杈冪粨鏋滄潵纭畾琛岃鍏ユ父鏍囧悗鏄惁鍙戠敓浜嗕慨鏀癸紝濡傛灉琛ㄤ笉鍖呭惈timestamp鍒楋紝瀹冩敼鐢ㄦ牎楠屽拰鍊艰繘琛岀‘瀹氾紝濡傛灉浠ヤ慨鏀硅琛岋紝鍒欏皾璇曡繘琛岀殑瀹氫綅鏇存柊鎴栧垹闄ゅ皢澶辫触锛屽鏋滆繕鎸囧畾浜咶AST_FORWARD锛屽垯涓嶈兘鎸囧畾OPTIMISTIC銆 + +TYPE_WARNING:鎸囧畾娓告爣浠庢墍璇锋眰鐨勭被鍨嬮殣寮忚浆鎹负鍙︿竴绉嶇被鍨嬫椂锛屽悜瀹㈡埛绔彂閫佽鍛婃秷鎭 + +select_statement锛氭槸瀹氫箟娓告爣缁撴灉闆嗕腑鐨勬爣鍑哠ELECT璇彞銆 + +娉細DECLARE <娓告爣鍚>CURSOR FOR 鏌ヨ璇彞; -- 鏈绠鍗曠殑娓告爣澹版槑 + +娉ㄦ剰锛氬叧闂父鏍囷紝闇瑕佹墽琛屼笅闈袱鏉″懡浠 + +CLOSE 娓告爣鍚嶇О;銆--鍏抽棴娓告爣 + +DEALLOCATE 娓告爣鍚嶇О;--鎾ら攢娓告爣(閲婃斁璧勬簮 锛 + +涓夈佹父鏍囦富瑕佺敤閫 + +1銆佸畾浣嶅埌鏌ヨ缁撴灉闆嗕腑鐨勬煇涓琛屻 + +2銆佸褰撳墠浣嶇疆鐨勬暟鎹繘琛岃鍐欍 + +3銆佸彲浠ュ缁撴灉闆嗕腑鐨勬暟鎹崟鐙搷浣滐紝鑰屼笉鏄暣琛屾墽琛岀浉鍚岀殑鎿嶄綔銆 + +4銆佹父鏍囨槸闈㈠悜鏁版嵁闆嗗悎鍜岄潰鍚戞暟鎹鐨勭▼搴忚璁′箣闂寸殑妗ユ銆 + +鍥涖佹父鏍囩殑绠鍗曠ず渚 + +DECLARE @Id NVARCHAR(MAX) +DECLARE @UserName NVARCHAR(MAX) +DECLARE @Password NVARCHAR(MAX) +DECLARE @NickName NVARCHAR(MAX) +create table #tmp (Id NVARCHAR(MAX),UserName NVARCHAR(MAX),Password NVARCHAR(MAX),NickName NVARCHAR(MAX)) --寤虹珛涓存椂鏁版嵁琛 + +--澹版槑涓涓父鏍噈ycursor锛宻elect璇彞涓弬鏁扮殑涓暟蹇呴』瑕佸拰浠庢父鏍囧彇鍑虹殑鍙橀噺鍚嶇浉鍚 +DECLARE mycursor CURSOR +FOR + SELECT Id,UserName,Password,NickName FROM dbo.Users +OPEN mycursor --鎵撳紑娓告爣 +--浠庢父鏍囬噷鍙栧嚭鏁版嵁璧嬪煎埌鎴戜滑鍒氭墠澹版槑鐨勫彉閲忎腑(绉诲姩娓告爣鎸囧悜鍒扮涓鏉℃暟鎹紝鎻愬彇绗竴鏉℃暟鎹瓨鏀惧湪鍙橀噺涓) +FETCH NEXT FROM mycursor INTO @Id, @UserName,@Password,@NickName +--鍒ゆ柇娓告爣鐨勭姸鎬 +-- 0 fetch璇彞鎴愬姛 +---1 fetch璇彞澶辫触鎴栨琛屼笉鍦ㄧ粨鏋滈泦涓 +--- 2 琚彁鍙栫殑琛屼笉瀛樺湪 +WHILE (@@fetch_status = 0) --濡傛灉涓婁竴娆℃搷浣滄垚鍔熷垯缁х画寰幆 + BEGIN + --鏄剧ず鍑烘垜浠瘡娆$敤娓告爣鍙栧嚭鐨勫 + --print (@Id+'--------'+@UserName+'--------'+@Password+'----'+@NickName) + --鏉′欢鍒ゆ柇 + if (@Id>=10) + begin + INSERT INTO #tmp(Id,UserName,Password,NickName) VALUES(@Id,@UserName,@Password,@NickName) + end + --鐢ㄦ父鏍囧幓鍙栦笅涓鏉¤褰(缁х画鍙栦笅涓琛屾暟鎹) + FETCH NEXT FROM mycursor INTO @Id,@UserName,@Password,@NickName + END + +CLOSE mycursor --鍏抽棴娓告爣 +DEALLOCATE mycursor --鎾ら攢娓告爣(閲婃斁璧勬簮 ) +SELECT * FROM #tmp; --鏌ヨ涓存椂琛 +DROP TABLE #tmp --鍒犻櫎涓存椂琛 +浜斻佹荤粨 + +寤鸿灏介噺閬垮厤浣跨敤娓告爣锛屾父鏍囦娇鐢ㄦ椂浼氬鏁版嵁琛屽姞閿侊紝鍙兘浼氬奖鍝嶅叾浠栦笟鍔$殑姝e父鎿嶄綔銆傚綋鏁版嵁閲忓ぇ鏃舵墽琛屾晥鐜囦篃杈冧綆銆傚彟澶栵紝绯荤粺鍐呭瓨涔熸槸鍏朵腑涓涓檺鍒躲傚洜涓烘父鏍囧叾瀹炴槸鐩稿綋浜庢妸纾佺洏鏁版嵁鏁翠綋鏀惧叆浜嗗唴瀛樹腑锛屽鏋滄父鏍囨暟鎹噺澶у垯浼氶犳垚鍐呭瓨涓嶈冻锛屽唴瀛樹笉瓒冲甫鏉ョ殑褰卞搷澶у閮界煡閬撲簡銆傛墍浠ワ紝鍦ㄦ暟鎹噺灏忔瘮杈冨皬鐨勬儏鍐垫墠鍘讳娇鐢ㄦ父鏍囥備絾涓嶅缓璁娇鐢ㄦ父鏍囷紝鍙互閫氳繃浠庣紪绋嬭瑷绛夋柟寮忓疄鐜扮浉搴旂殑涓氬姟閫昏緫銆 \ No newline at end of file -- Gitee