diff --git "a/25\346\210\264\344\277\212\351\224\213/\344\275\234\344\270\232/2022.9.30\344\275\234\344\270\232--\346\270\270\346\240\207.sql" "b/25\346\210\264\344\277\212\351\224\213/\344\275\234\344\270\232/2022.9.30\344\275\234\344\270\232--\346\270\270\346\240\207.sql" new file mode 100644 index 0000000000000000000000000000000000000000..daa80193243a3437548ac6b44fcb65ad033ab872 --- /dev/null +++ "b/25\346\210\264\344\277\212\351\224\213/\344\275\234\344\270\232/2022.9.30\344\275\234\344\270\232--\346\270\270\346\240\207.sql" @@ -0,0 +1,56 @@ +--例3:使用游标实现加薪操作 +--创建游标 +declare cur_id cursor scroll for select PeopleId from People +--打开游标 +open cur_id +--提取数据 +declare @id int, @money money = 1000 +fetch first from cur_id into @id +while (@@fetch_status = 0) + begin + update People set PeopleSalary += @money where PeopleId = @id + fetch next from cur_id into @id + end +--关闭游标 +close cur_id +select * from People +go + +--例4:使用游标删除不达标员工 +select * from People +--创建 +declare cur_id cursor scroll for select PeopleId,PeopleSalary from People +--打开 +open cur_id +--提取 +declare @id int, @money money +fetch first from cur_id into @id,@money +while(@@FETCH_STATUS = 0) + begin + if(@money < 10000) + begin + delete People where PeopleId = @id + fetch next from cur_id into @id,@money + end + else + fetch next from cur_id into @id,@money + end +close cur_id +select * from People +go +--使用游标 实现:如果A表与B表中ID字段值相同,那么将B表中的省份,城市 修改成与A表中的城市一致(连表) + +declare cur_id cursor scroll for select A.* from A inner join B on A.id = B.id +deallocate cur_id +open cur_id +declare @id int , @id1 int,@Province varchar(10),@City varchar(10) +fetch first from cur_id into @id,@Province,@City +while(@@FETCH_STATUS = 0) + begin + update B set B.Province = @Province , B.City = @City where B.id = @id + fetch next from cur_id into @id,@Province,@City + end + +close cur_id +select * from A +select * from B \ No newline at end of file diff --git "a/25\346\210\264\344\277\212\351\224\213/\347\254\224\350\256\260/2022.9.30\347\254\224\350\256\260--\346\270\270\346\240\207.md" "b/25\346\210\264\344\277\212\351\224\213/\347\254\224\350\256\260/2022.9.30\347\254\224\350\256\260--\346\270\270\346\240\207.md" new file mode 100644 index 0000000000000000000000000000000000000000..ab855cfa526e185f0be96f147043b00a0c9ea0e6 --- /dev/null +++ "b/25\346\210\264\344\277\212\351\224\213/\347\254\224\350\256\260/2022.9.30\347\254\224\350\256\260--\346\270\270\346\240\207.md" @@ -0,0 +1,67 @@ + + +## 1.1娓告爣鐨勫熀鏈蹇 + +娓告爣鏄竴绉嶅鐞嗘暟鎹殑鏂规硶锛屽叿鏈夊缁撴灉闆嗚繘琛岄愯澶勭悊鐨勮兘鍔 + +## 1-2 娓告爣鐨勫疄鐜板姛鑳藉強浣跨敤姝ラ + +**娓告爣鐨勫疄鐜板姛鑳** + +鍏佽瀵 SELECT 杩斿洖鐨勮〃涓殑姣忎竴琛岃繘琛岀浉鍚屾垨涓嶅悓鐨勬搷浣滐紝鑰屼笉鏄竴娆″鏁翠釜缁撴灉闆嗚繘琛屽悓涓绉嶆搷浣滐紱 +浠庤〃涓殑褰撳墠浣嶇疆妫绱竴琛屾垨澶氳鏁版嵁锛 +娓告爣鍏佽搴旂敤绋嬪簭瀵瑰綋鍓嶄綅缃殑鏁版嵁杩涜淇敼銆佸垹闄ょ殑鑳藉姏锛 +瀵逛簬涓嶅悓鐢ㄦ埛瀵圭粨鏋滈泦鍖呭惈鐨勬暟鎹墍鍋氱殑淇敼锛屾敮鎸佷笉鍚岀殑鍙鎬х骇鍒紱 +娓告爣鐨勪娇鐢ㄦ楠 + +- 鍒涘缓娓告爣 + +```sql +declare 娓告爣鍚 cursor scroll for select鏌ヨ璇彞 + +娓告爣鍒嗕负灞閮ㄦ父鏍囧拰鍏ㄥ眬娓告爣涓ょ锛宭ocal琛ㄧず灞閮ㄦ父鏍囷紝global琛ㄧず鍏ㄥ眬娓告爣(榛樿鍊硷紝鍙互鐪佺暐)銆傚綋鎸囧畾 forward_only(榛樿鍊硷紝鍙互鐪佺暐)鏃讹紝娓告爣鏄彧杩涚殑锛屼篃灏辨槸璇村彧鑳戒粠澶村埌灏惧湴鎻愬彇璁板綍锛屽鏋滈渶瑕佸湪琛屼箣闂存潵鍥炶烦璺冿紝闇瑕佹寚瀹氫负scroll銆 + +``` + +- 鎵撳紑娓告爣 + +- 璇诲彇鍐呭 +- 鍏抽棴娓告爣 +- 閲婃斁娓告爣锛堝垹闄わ級 + +```sql +deallocate (娓告爣鍚) +``` + +**鎻愬彇鏁版嵁鎿嶄綔锛** + +```sql +fetch first from <娓告爣鍚> --缁撴灉闆嗙殑绗竴琛 +fetch last from <娓告爣鍚> --鏈鍚庝竴琛 +fetch absolute 1 from <娓告爣鍚> --浠庢父鏍囩殑绗竴琛屽紑濮嬫暟锛岀n琛屻 +fetch relative 3 from <娓告爣鍚> --浠庡綋鍓嶄綅缃暟锛岀n琛屻 +fetch next from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笅涓琛 +fetch prior from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笂涓琛 +``` + + **娓告爣鍒嗕负闈欐佹父鏍囧拰鍔ㄦ佹父鏍囷紝闈欐佹父鏍囩殑鏁版嵁鏄浐瀹氱殑锛屼笉浼氬洜涓烘暟鎹〃鐨勬敼鍙樿屾敼鍙橈紱鍔ㄦ佹父鏍囩殑鏁版嵁鏄殢鐫鏁版嵁琛ㄥ彉鍖栬屽彉鍖栫殑锛屾父鏍囬粯璁ゆ槸鍔ㄦ佹父鏍** + +```sql + +DECLARE @id INT , @name NVARCHAR(50) --澹版槑鍙橀噺锛岄渶瑕佽鍙栫殑鏁版嵁 +DECLARE cur CURSOR --鍘绘帀STATIC鍏抽敭瀛楀嵆鍙 +FOR + SELECT * FROM #T +OPEN cur --鎵撳紑娓告爣 +FETCH NEXT FROM cur INTO @id, @name --鍙栨暟鎹 +WHILE ( @@fetch_status = 0 ) --鍒ゆ柇鏄惁杩樻湁鏁版嵁 + BEGIN + SELECT '鏁版嵁: ' + RTRIM(@id) + @name + UPDATE #T SET name='娴嬭瘯' WHERE id=4 --娴嬭瘯闈欐佸姩鎬佺敤 + FETCH NEXT FROM cur INTO @id, @name --杩欓噷涓瀹氳鍐欏彇涓嬩竴鏉℃暟鎹 + END +CLOSE cur --鍏抽棴娓告爣 +DEALLOCATE cur + +``` +