From 4ff03066e82f6e200f6f6e4b28768d6cd8758d53 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B7=91=E8=8A=B3?= <2025575070@qq.com> Date: Mon, 10 Oct 2022 01:02:59 +0800 Subject: [PATCH 1/4] 10.7 --- .../10-7-\344\275\234\344\270\232.sql" | 129 ++++ .../SQL-NOTE.md" | 609 ++++++++++++++++++ 2 files changed, 738 insertions(+) create mode 100644 "24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" create mode 100644 "24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" diff --git "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..c3a555c --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" @@ -0,0 +1,129 @@ + +use BankTest +go + +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +select * from BankCard +go +-- drop proc proc_getMinMoney +create proc proc_getMinMoney +@minMoney money output +as +begin + select @minMoney = MIN(CardMoney) from BankCard + select CardNo,RealName,CardMoney from BankCard b + join AccountInfo a on a.AccountId = b.AccountId + where CardMoney = @minMoney +end +go + +declare @minMoney money +exec proc_getMinMoney @minMoney output + + + +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 +select * from CardExchange +go +create proc proc_getInMoney +@cardNo varchar(50), +@inMoney money +as +begin + insert into CardExchange values(@cardNo,@inMoney,0,GETDATE()) + +end +go +-- +declare @cardNo varchar(50) = '6225125478544587', + @inMoney money = 8848 +exec proc_getInMoney @cardNo,@inMoney +select * from CardExchange + + + +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +select * from BankCard +go +-- drop proc proc_outMoney + +create proc proc_outMoney +@cardNum varchar(50), +@outMoney money, +@backNum int output +as +begin + select @backNum = (case when CardMoney >= @outMoney then 1 else -1 end) from BankCard + where CardNo = @cardNum + update BankCard set CardMoney -= @outMoney where CardNo = @cardNum +end +go +--执行 +declare @cardNum varchar(50) = '6225547854125656', +@outMoney money = 1000, +@backNum int +exec proc_outMoney @cardNum,@outMoney,@backNum output +select @backNum +select * from BankCard + + +--4. 查询出某时间段的银行存取款信息以及存款总金额**,取款总金额, +--传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 +select * from CardExchange --交易记录 + +-- drop proc proc_getBankMessage +go +create proc proc_getBankMessage +@openTime smalldatetime, +@overTime smalldatetime, +@InSum money output, +@OutSum money output +as +begin + select @InSum = SUM(MoneyInBank),@OutSum = SUM(MoneyOutBank) from CardExchange + where ExchangeTime between @openTime and @overTime +end +go + +declare @openTime smalldatetime = '2022-09-07 14:30:00', +@overTime smalldatetime = '2022-09-27 08:19:00', +@InSum money,@OutSum money + +exec proc_getBankMessage @openTime,@overTime,@InSum output,@OutSum output +select @InSum 存款总额,@OutSum 取款总额 + + +--5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 +--(提示:随机生成 0-9 的整数: float(rand()*10)) rand():随机生成0.0-1.0的小数 float:向下取整) + +-- drop proc proc_pwd +-- update BankCard set CardPwd = '123456' where AccountId = 1 +go +create proc proc_pwd +@cardNo varchar(50), +@pwd varchar(50) +as +begin + if((select CardNo from BankCard where CardNo = @cardNo) != ' ' + and @pwd = (select CardPwd from BankCard where CardNo = @cardNo and @pwd = CardPwd)) + begin + if(len(@pwd) < 8) + begin + update BankCard set CardPwd = CONCAT(ROUND(99999+RAND()*99999,0),ROUND(RAND()*9,0),ROUND(RAND()*9,0)) where CardNo = @cardNo + end + end + else + begin + print '错误了X_X' + end +end +go +-- 执行 +declare @cardNo varchar(50) = '6225125478544587',@pwd varchar(50) = '123456' +exec proc_pwd @cardNo,@pwd +select * from BankCard + + + + + diff --git "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" new file mode 100644 index 0000000..44671b9 --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" @@ -0,0 +1,609 @@ +# SQL SERVER + +## -- 9.15 + +#### 鍒涘缓鏁版嵁搴 + +```sql +//1 +create database 鏁版嵁搴撳悕; +//2 +if exists (select * from sys.databases where name = '鏁版嵁搴撳悕') +drop database 鏁版嵁搴撳悕; +``` + +#### 鍒涘缓鏁版嵁琛 + +```sql +create table 琛ㄥ悕( + +); +``` + +#### 鍒犻櫎琛 + +```sql +drop table 琛ㄥ悕; +``` + +#### 淇敼琛ㄧ粨鏋 + +```sql +淇敼琛ㄧ粨鏋 琛ㄥ悕 add constraint 绾︽潫鍚 foreign key(瑕佸紩鐢ㄧ殑瀛楁) references 涓婚敭琛(瀛楁) +``` + + + +闈炵┖ not null + +涓婚敭(鏍囪瘑鍒) primary key + +鑷 identity(浠庡嚑寮濮,涓娆″灏) + +妫鏌ョ害鏉 check() + +澶栭敭 references + + + +## --9.16 + +涓嶉噸澶 distinct + +鎺掑簭 order by (desc 闄嶅簭 asc 鍗囧簭) + +**count()** + +count(*):绌哄间篃缁熻 + +count(瀛楁)锛氬綋鍓嶅瓧娈电殑绌哄间笉缁熻 + +**淇濈暀灏忔暟鐐瑰悗鍑犱綅** + +```sql +round(灏忔暟,淇濈暀浣嶆暟); +decimal(5,2); +``` + +**寮哄埗杞崲** + +```sql +CONVERT(VARCHAR(19),GETDATE()); +CAST('9.0' AS decimal); +``` + +**鍒犻櫎** +drop 鍒犻櫎鏁村紶琛 +truncate鍒犻櫎鏁村紶琛紝琛ㄨ繕鍦 + +## --9.16 + +![image-20220920232835355](C:\Users\Agares\AppData\Roaming\Typora\typora-user-images\image-20220920232835355.png) + +### exists + +鍏抽敭瀛桬XISTS鏋勯犲瓙鏌ヨ鏃讹紝褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓嶄负绌烘椂锛屽垯EXISTS杩斿洖鐨勭粨鏋滀负TRUE锛屽灞傛煡璇㈣鍙ヨ繘琛屾煡璇紱褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓虹┖鏃讹紝鍒橢XISTS杩斿洖鐨勭粨鏋滀负FALSE锛屽灞傛煡璇㈣鍙ヤ笉杩涜鏌ヨ銆 + +```sql +--锛1锛夋煡璇㈠鐢熻〃(tb-student)涓紝鏄惁鏈夊鐢熻鑰呯殑濮撳悕鏄"榛勫紭" +if exists(select stu_num from tb_record where stu_num in (select stu_num from tb_student where name='榛勫紭') and return_time is null) + print '鏈' +else + print '娌℃湁' + +--锛2锛夋煡璇功鐩〃(tb-bibliography)涓紝搴撳瓨鏁颁负0鐨勪功鐩悕绉(name) +``` + + + +鎺掑悕 rank() over() + +### 鎺掑簭鍑芥暟 + +**鎺掑簭鍑芥暟 OVER( [鍒嗙粍瀛愬彞] 鎺掑簭瀛愬彞[DESC][ASC] )** + +**鎺掑簭瀛愬彞 锛歄RDER BY 鎺掑簭鍒,鎺掑簭鍒椻** + +缁冧範:浣跨敤鍚勪釜鎺掑悕鍑芥暟瀵瑰鍛樼殑Java 鎴愮哗杩涜鎺掑悕锛屽苟浠旂粏浣撲細鍏朵腑鎺掑簭鍑芥暟鐨勫叿浣撶敤娉曚笌鍏朵腑鐨勫尯鍒 + +```sql + +``` + +- ROW_NUMBER()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑杩炵画鐨勫簭鍙** +- RANK()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪骞朵笖璺崇┖** +- DENSE_RANK() 鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪涓嶈烦绌** + + + + + +### 9-21 + +--鏌ヨ鐢风敓鍜屽コ鐢熶腑骞撮緞鏈澶х殑瀛︾敓淇℃伅锛岃姹傛樉绀猴細濮撳悕锛屾у埆锛屽勾榫 +--闈炲叧鑱斿瓙鏌ヨ + +```sql +select birth,name 濮撳悕,gender 鎬у埆 from tb_student +where birth in (select min(birth) from tb_student group by gender) +``` + +--鍏宠仈瀛愭煡璇細鍐呴儴鏌ヨ闇瑕佸紩鐢ㄥ閮ㄨ〃宸叉煡璇㈠嚭鐨勪俊鎭 + +```sql +select birth,name 濮撳悕,gender 鎬у埆 from tb_student t1 +where birth = (select min(birth) from tb_student t2 where t2.gender=t1.gender) +``` + +--绐楀彛鍑芥暟锛氭帓搴 + +```sql +select birth,濮撳悕,鎬у埆 from ( +select birth,name 濮撳悕,gender 鎬у埆,row_number() over (partition by gender order by birth ) as birth_rank from tb_student +) as T1 +where T1.birth_rank = 1 +``` + + + +### 9-22 + +#### 灞閮ㄥ彉閲 + +灞閮ㄥ彉閲忓繀椤讳互鏍囪@浣滀负鍓嶇紑 锛屽@age +灞閮ㄥ彉閲忕殑浣跨敤鏄厛澹版槑锛屽啀璧嬪 +灞閮ㄥ彉閲忓彧鍦ㄥ畾涔夊畠鐨勫眬閮ㄨ寖鍥村唴鏈夋晥 + +澹版槑涓涓眬閮ㄥ彉閲忥細**declare @鍙橀噺鍚 鏁版嵁绫诲瀷** + +```sql +--渚嬶細 + declare @id int --澹版槑涓涓悕涓篿d鐨勬暣鍨嬪彉閲 + declare @name varchar(50) --澹版槑涓涓彲鍙橀暱搴︿负50鐨勫瓨鏀惧鍚嶇殑瀛楃涓插彉閲 + +``` + +璧嬪硷細 + +- set @鍙橀噺鍚 = 鍊 + +- select @鍙橀噺鍚 = 鍊 + +```sql +--渚: + select @id = 1001 + set @name = '鍛ㄩ' +``` + +set涓巗elect璧嬪肩殑鍖哄埆锛 + +set璧嬪肩粰鍙橀噺鎸囧畾鐨勫硷紝select涓鑸敤浜庤〃涓煡璇㈠嚭鐨勬暟鎹祴鍊肩粰鍙橀噺锛屽鏋滄煡璇㈢粨鏋滄湁澶氭潯锛屽彇鏈鍚庝竴鏉¤祴鍊肩粰鍙橀噺 + +### 杈撳嚭璇彞 + +1. print鍙橀噺鎴栬〃杈惧紡 +2. select鍙橀噺鎴栬〃杈惧紡 + +```sql +--渚: + print '鏁版嵁搴撴湇鍔″櫒鍚:' + @@servicename + select 15*8 +``` + +### 閫昏緫鎺у埗璇彞 + +```sql +-- if() else +if() +begin + ... +end +else + ... +end + +-- switch case +case +when 鏉′欢 then 缁撴灉 +else 鍏朵粬缁撴灉 +end +``` + +### 寰幆鎺у埗璇彞 + +```sql +while() +begin + ... +end +``` + + + +## --9.26 + +### 瑙嗗浘 + +瑙嗗浘鏄竴寮犺櫄鎷熻〃锛屽畠琛ㄧず涓寮犺〃鐨勯儴鍒嗘暟鎹垨澶氬紶琛ㄧ殑缁煎悎鏁版嵁锛屽叾缁撴瀯鍜屾暟鎹槸寤虹珛鍦ㄥ琛ㄧ殑鏌ヨ鍩虹涓 +瑙嗗浘涓苟涓嶅瓨鏀炬暟鎹紝鑰屾槸瀛樻斁鍦ㄨ鍥炬墍寮曠敤鐨勫師濮嬭〃锛堝熀琛級涓紝鍗冲熀鏈腑鐨勬暟鎹彂鐢熷彉鍖栵紝浠庤鍥句腑鏌ヨ鐨勬暟鎹篃闅忎箣鏀瑰彉銆 +鍚屼竴寮犲師濮嬭〃锛屾牴鎹笉鍚岀敤鎴风殑涓嶅悓闇姹傦紝鍙互鍒涘缓涓嶅悓鐨勮鍥 + +```sql +--寤虹珛瑙嗗浘 +create view <瑙嗗浘鍚> [(<鍒楀悕>[,<鍒楀悕>]...)] + as <瀛愭煡璇> [with check option] +``` + +### pivot(琛岃浆鍒) + +```sql +pivot( +鏁版嵁 for 瑕佽浆鎴愬垪鐨勭帺鎰 in (鍒楀悕1,鍒楀悕2,...) +) as 鍚嶅瓧 +``` + +### union(鍒楄浆琛) + +```sql +--union锛屾嫾鎺ュ琛 +select * from 琛1 +union +select * from 琛2 + +--unpivot锛屼粈涔堢帺鎰 +unpivot( +score for subject in(english,maths,music) +)as v +``` + + + +## --9.28 + +### 浜嬪姟 + +**浜嬪姟锛 Transaction锛夌敱涓娆℃垨鑰呭娆″熀鏈搷浣滄瀯鎴愶紝鎴栬呰锛屼簨鍔$敱涓鏉℃垨鑰呭鏉 SQL 璇彞鏋勬垚銆** + +**浜嬪姟涓殑鎵鏈 SQL 璇彞鏄竴涓暣浣擄紝鍏卞悓杩涢锛屼笉鍙垎鍓诧紝瑕佷箞鍏ㄩ儴鎵ц鎴愬姛锛岃涔堝叏閮ㄦ墽琛屽け璐ャ** + + + +#### 浜嬪姟鐨勫睘鎬(ACID) + +##### 1) 鍘熷瓙鎬 **A**tomicity + +涓涓簨鍔′腑鐨勬墍鏈 SQL 璇彞锛岃涔堝叏閮ㄦ墽琛屾垚鍔燂紝瑕佷箞鍏ㄩ儴鎵ц澶辫触锛屼笉浼氱粨鏉熷湪涓棿鐨勬煇涓幆鑺傘備簨鍔″湪鎵ц杩囩▼涓彂鐢熼敊璇紝浼氳鍥炴粴锛圧ollback锛夊埌浜嬪姟寮濮嬪墠鐨勭姸鎬 + +##### 2) 涓鑷存 **C**onsistency + +鍦ㄤ簨鍔″紑濮嬩箣鍓嶅拰浜嬪姟缁撴潫浠ュ悗锛屾暟鎹簱鐨勫畬鏁存ф病鏈夎鐮村潖銆傝繖琛ㄧず鍐欏叆鐨勬暟鎹繀椤诲畬鍏ㄧ鍚堟墍鏈夌殑棰勮瑙勫垯锛屽叾涓寘鍚暟鎹殑绮剧‘搴︺佷覆鑱旀т互鍙婂悗缁暟鎹簱鍙互鑷彂鎬у湴瀹屾垚棰勫畾鐨勫伐浣溿 + +##### 3) 闅旂鎬 **I**solation + +鏁版嵁搴撳厑璁稿涓苟鍙戜簨鍔″悓鏃跺鍏舵暟鎹繘琛岃鍐欏拰淇敼鐨勮兘鍔涳紝闅旂鎬у彲浠ラ槻姝㈠涓簨鍔″苟鍙戞墽琛屾椂鐢变簬浜ゅ弶鎵ц鑰屽鑷存暟鎹殑涓嶄竴鑷淬 + +##### 4) 鎸佷箙鎬 **D**urability + +浜嬪姟澶勭悊缁撴潫鍚庯紝瀵规暟鎹殑淇敼灏辨槸姘镐箙鐨勶紝鍗充究绯荤粺鏁呴殰涔熶笉浼氫涪澶便 + +### + +```sql +--寮濮嬩簨鍔 +begin tran +--閿欒浠g爜 +declare @err int = 0 + +--浜嬪姟鎻愪氦锛氬鏋滆鍙ラ兘鎵ц鎴愬姛锛 commit tran/transaction +if (@myerr = 0) + begin + commit transaction A + end +--浜嬪姟鍥炴粴锛氬鏋滀簨鍔′腑鏈変竴鏉¤鍙ユ墽琛屽け璐ワ紝 rollback tran/transaction +else + begin + rollback transaction B + end + + --select * from Products +--print @@error --閿欒鐮:0:鎵ц鎴愬姛 闈0鐨勬椂鍊欎唬琛ㄨ璇彞鏈夐敊璇 + +--鏍囪浜嬪姟鍥炴粴璧风偣 锛 save tran B + +--鏂规硶2: +----begin try +---- --浜嬪姟鐨勫紑濮嬶細begin tran +---- --sql璇彞 +---- commit --鎻愪氦 +----end try + +----begin catch --鎹曡幏閿欒,濡傛灉鏌愭潯璇彞鎵ц閿欒锛屽皢琚崟鑾 +---- rollback tran +----end +``` + + + +## --9.30 娓告爣 Cursor + +### + +娓告爣鍙互浣跨敤鎴烽愯璁块棶鐢盨QL Server杩斿洖鐨勭粨鏋滈泦锛岃兘鎶婇泦鍚堟搷浣滆浆鎹㈡垚**鍗曚釜璁板綍澶勭悊鏂瑰紡**锛屾寜鐓х敤鎴疯嚜宸辩殑鎰忔効鏉ユ樉绀哄拰澶勭悊杩欎簺璁板綍銆 + +#### 娓告爣鍒嗙被: + +锛1锛夐潤鎬佹父鏍(Static)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝鏁版嵁鍙戠敓鍙樺寲锛屾父鏍囦腑鏁版嵁涓嶅彉 +锛2锛夊姩鎬佹父鏍(Dynamic)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝鏁版嵁鍙戠敓鍙樺寲锛屾父鏍囦腑鏁版嵁鏀瑰彉锛岄粯璁ゅ笺 +锛3锛夐敭闆嗛┍鍔ㄦ父鏍(KeySet)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝琚爣璇嗙殑鍒楀彂鐢熸敼鍙橈紝娓告爣涓暟鎹敼鍙橈紝鍏朵粬鍒楁敼鍙橈紝娓告爣涓暟鎹笉鍙樸 + +#### 娓告爣鐨勪娇鐢 + +```sql + +--鍒涘缓娓告爣(Scroll浠h〃婊氬姩娓告爣锛屼笉鍔燬croll鍒欐槸鍙繘鐨勶紝鍙兘鏀寔fetch next) +declare <娓告爣鍚> cursor scroll for select stuname from stuinfo + +--鎵撳紑娓告爣锛 +open <娓告爣鍚> + +--鍏抽棴娓告爣 +close <娓告爣鍚> + +--鍒犻櫎娓告爣 +deallocate <娓告爣鍚> + +--鎻愬彇鏁版嵁鎿嶄綔 +fetch first from <娓告爣鍚> --缁撴灉闆嗙殑绗竴琛 +fetch last from <娓告爣鍚> --鏈鍚庝竴琛 +fetch absolute 1 from <娓告爣鍚> --浠庢父鏍囩殑绗竴琛屽紑濮嬫暟锛岀n琛屻 +fetch relative 3 from <娓告爣鍚> --浠庡綋鍓嶄綅缃暟锛岀n琛屻 +fetch next from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笅涓琛 +fetch prior from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笂涓琛 +``` + + + +**鎻愬彇鏁版嵁缁欏彉閲忎互渚涘畠鐢紙鍙栧嚭绗3琛屽鐢熷鍚嶏紝鏌ヨ璇ュ鐢熻缁嗕俊鎭級锛** + +```sql +declare @vari varchar(20) +fetch absolute 3 from <娓告爣鍚> into @vari +select * from StuInfo where stuName = @vari +``` + +**鍒╃敤娓告爣鎻愬彇鎵鏈夌殑瀛︾敓淇℃伅锛** + +```sql +--鏂规涓锛 +fetch absolute 1 from <娓告爣鍚> +while @@FETCH_STATUS = 0 --@@FETCH_STATUS=0,鎻愬彇鎴愬姛锛-1鎻愬彇澶辫触锛-2琛屼笉瀛樺湪 + begin + fetch next from <娓告爣鍚> + end + +--鏂规浜岋細 +declare @myvar varchar(20) +fetch first from <娓告爣鍚> into @myvar +while @@FETCH_STATUS = 0 + begin + print '鎻愬彇鎴愬姛'+@myvar + fetch next from <娓告爣鍚> into @myvar + end +``` + +**鍒╃敤娓告爣淇敼鍜屽垹闄ゆ暟鎹細** + +```sql +--鏇存柊璇硶: +-- fetch absolute 3 from <娓告爣鍚> +-- update 璇彞 where Current of <娓告爣鍚> + +``` + + + +## --10.6 鍑芥暟 + +### 鍒嗙被 + +锛1锛夌郴缁熷嚱鏁 + +锛2锛夎嚜瀹氫箟鍑芥暟(鏂规硶锛氬皢涓涓姛鑳藉皝瑁呮垚鍙噸鐢ㄧ殑鍑芥暟)銆 + +鍏朵腑鑷畾涔夊嚱鏁板張鍙互鍒嗕负锛1锛夋爣閲忓煎嚱鏁帮紙杩斿洖鍗曚釜鍊硷級锛岋紙2锛夎〃鍊煎嚱鏁帮紙杩斿洖鏌ヨ缁撴灉锛 + + + +#### 鏍囬噺鍊煎嚱鏁 + +```sql +CREATE FUNCTION function_name(@parameter_name parameter_data_type) --锛園鍙傛暟鍚 鍙傛暟鐨勬暟鎹被鍨嬶級 +RETURNS date_type --杩斿洖杩斿洖鍊肩殑鏁版嵁绫诲瀷 + +[AS] + +BEGIN + + function_body --鍑芥暟浣 + + RETURN 琛ㄨ揪寮; --蹇呴』瑕佹湁鐨 + +END +``` + +#### 琛ㄥ煎嚱鏁 + +```sql +create function 鍚嶇О + +([{@鍙傛暟鍚嶇О 鍙傛暟绫诲瀷[=榛樿鍊糫}[,n]]) + +returns @灞閮ㄥ彉閲 table锛堝弬鏁板悕 鍙傛暟绫诲瀷锛 + +[with encryption] + +[as] + +begin + +鍑芥暟浣 + +return 鍑芥暟杩斿洖鍊 + +end +``` + + + +鍒犻櫎鑷畾涔夊嚱鏁 + +```sql +DROP function 鍑芥暟鍚 +``` + + + +## -- 10.7 瀛樺偍杩囩▼(Stored Procedure) + + + +瀛樺偍杩囩▼鏄**棰勭紪璇**SQL璇彞闆嗗悎锛岃繖浜涜鍙ュ瓨鍌ㄥ湪涓涓悕绉帮紙瀛樺偍杩囩▼鐨勫悕绉帮級涓嬪苟浣滀负鍗曞厓鏉ュ鐞嗐傚瓨鍌ㄨ繃绋嬩唬鏇夸簡浼犵粺鐨勯愭潯鎵цSQL璇彞鐨勬柟寮忥紝涓涓瓨鍌ㄨ繃绋嬩腑鍙互鍖呭惈鏌ヨ銆佹彃鍏ャ佸垹闄ゃ佹洿鏂扮瓑鎿嶇旱鐨勪竴绯诲垪SQL璇彞锛屽綋杩欎釜瀛樺偍杩囩▼琚皟鐢ㄦ墽琛屾椂锛岃繖浜涙搷浣滀篃浼氬悓鏃舵墽琛屻 + +灏佽濂 --> 璋冪敤 + +#### 瀛樺偍杩囩▼鐨勫垎绫 + +##### 绯荤粺瀛樺偍杩囩▼ + + 绯荤粺瀛樺偍杩囩▼鏄敤鏉ョ鐞哠QL Server涓庢樉绀烘湁鍏虫暟鎹簱鍜岀敤鎴风殑淇℃伅鐨勫瓨鍌ㄨ繃绋嬨 + +```sql +sp_databases 鍒楀嚭鏈嶅姟涓婄殑鎵鏈夋暟鎹簱 +sp_helpdb --鎶ュ憡鏈夊叧鎸囧畾鏁版嵁搴撴垨鎵鏈夋暟鎹簱鐨勪俊鎭 +sp_renamedb 鏇存敼鏁版嵁搴撶殑鍚嶇О +sp_tables --杩斿洖褰撳墠鐜涓嬪彲鏌ヨ鐨勫璞$殑鍒楄〃 +sp_columns 杩斿洖鏌愪釜琛ㄥ垪鐨勪俊鎭 +sp_help --杩斿洖鏌愪釜琛ㄧ殑鎵鏈変俊鎭 +sp_helpconstraint 鏌ョ湅鏌愪釜琛ㄧ殑绾︽潫 +sp_helpindex --鏌ョ湅鏌愪釜琛ㄧ殑绱㈠紩 +sp_stored_procedures 鍒楀嚭褰撳墠鐜涓殑鎵鏈夊瓨鍌ㄨ繃绋 +sp_password --娣诲姞鎴栦慨鏀圭櫥褰曡处鎴风殑瀵嗙爜 +sp_rename 閲嶅懡鍚嶅瓨鍌ㄨ繃绋 +sp_helptext 鏄剧ず榛樿鍊硷紝鏈姞瀵嗙殑瀛樺偍杩囩▼銆佺敤鎴峰畾涔夌殑瀛樺偍杩囩▼銆佽Е鍙戝櫒鎴栬鍥剧殑瀹為檯鏂囨湰銆 +``` + + + +##### 鑷畾涔夊瓨鍌ㄨ繃绋 + +**鍒涘缓瀛樺偍杩囩▼** + +1.娌℃湁杈撳叆鍙傛暟锛屾病鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼銆 + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +as + +go +``` + +2.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟鐨勫瓨鍌ㄨ繃绋 + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +go +``` + +3.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟锛屼絾鏄湁杩斿洖鍊肩殑瀛樺偍杩囩▼锛堣繑鍥炲煎繀椤绘暣鏁帮級銆 + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +return 鏁存暟 +go +``` + +4.鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ & 涓涓彉閲忓叿澶囧悓鏃惰緭鍏ヨ緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> output +<鍙橀噺2> <鏁版嵁绫诲瀷> output +... +as + +return 鏁存暟 +go +``` + + + +**鎵ц瀛樺偍杩囩▼** + +```sql +--鏃犲弬 +exec <瀛樺偍杩囩▼鍚嶇О> +--甯﹀弬 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--甯﹀弬甯﹁繑鍥炲 +declare @鍙橀噺 +exec @鍙橀噺 = <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ +declare @鍙橀噺 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +--涓涓彉閲忓悓鏃跺叿澶囪緭鍏ヨ緭鍑哄姛鑳 +declare @鍙橀噺 <鏁版嵁绫诲瀷> = 鍊 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +``` + + + +**鍒犻櫎瀛樺偍杩囩▼** + +```sql +drop procedure <瀛樺偍杩囩▼鍚嶇О> +``` + + + +#### 瀛樺偍杩囩▼鐨勪紭鐐 + +鍏佽妯″潡鍖栫▼搴忚璁 + +鎵ц閫熷害鏇村揩 + +鍑忓皯缃戠粶娴侀氶噺 + +鎻愰珮绯荤粺瀹夊叏鎬 + + + +#### 瀛樺偍杩囩▼涓庡嚱鏁扮殑鍖哄埆 + +1.鍌ㄥ瓨杩囩▼鍙互鏈夎繑鍥炲间篃鍙互鏃犺繑鍥炲笺傚嚱鏁板繀椤绘湁杩斿洖鍊笺 + +2.瀛樺偍杩囩▼鐨勫疄鐜版瘮杈冨鏉傦紝鑰屽嚱鏁扮殑瀹炵幇姣旇緝鏈夐拡瀵规с + +3.鍌ㄥ瓨杩囩▼鍙互杈撳叆杈撳嚭鍙傛暟锛岃屽嚱鏁板彧鍙互杈撳叆鍙傛暟銆 + +4.杩囩▼鍏佽鍦ㄥ叾涓夋嫨浠ュ強DML璇彞锛岃屽嚱鏁板彧鍙互鍦ㄥ叾涓璼elect璇彞銆 + +5.鍙互鍦ㄥ瓨鍌ㄨ繃绋嬩腑璋冪敤鍑芥暟锛屼笉鍙互鍦ㄥ嚱鏁颁腑璋冪敤瀛樺偍杩囩▼銆 + +6.鍑芥暟鍙互浣滀负鏉′欢鍦ㄨ鍙ヤ腑浣跨敤锛屼絾鏄瓨鍌ㄨ繃绋嬩笉鍙互銆 + + + + + + + -- Gitee From 12d5e1db0eeafe98093cb64c8e0a2e82253a34f9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B7=91=E8=8A=B3?= <2025575070@qq.com> Date: Sun, 9 Oct 2022 17:05:43 +0000 Subject: [PATCH 2/4] =?UTF-8?q?=E5=88=A0=E9=99=A4=E6=96=87=E4=BB=B6=2024?= =?UTF-8?q?=E5=BC=A0=E6=B7=91=E8=8A=B3/10-7-=E5=AD=98=E5=82=A8=E8=BF=87?= =?UTF-8?q?=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../10-7-\344\275\234\344\270\232.sql" | 129 ---- .../SQL-NOTE.md" | 609 ------------------ 2 files changed, 738 deletions(-) delete mode 100644 "24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" delete mode 100644 "24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" diff --git "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" deleted file mode 100644 index c3a555c..0000000 --- "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" +++ /dev/null @@ -1,129 +0,0 @@ - -use BankTest -go - ---1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 -select * from BankCard -go --- drop proc proc_getMinMoney -create proc proc_getMinMoney -@minMoney money output -as -begin - select @minMoney = MIN(CardMoney) from BankCard - select CardNo,RealName,CardMoney from BankCard b - join AccountInfo a on a.AccountId = b.AccountId - where CardMoney = @minMoney -end -go - -declare @minMoney money -exec proc_getMinMoney @minMoney output - - - ---2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 -select * from CardExchange -go -create proc proc_getInMoney -@cardNo varchar(50), -@inMoney money -as -begin - insert into CardExchange values(@cardNo,@inMoney,0,GETDATE()) - -end -go --- -declare @cardNo varchar(50) = '6225125478544587', - @inMoney money = 8848 -exec proc_getInMoney @cardNo,@inMoney -select * from CardExchange - - - ---3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 -select * from BankCard -go --- drop proc proc_outMoney - -create proc proc_outMoney -@cardNum varchar(50), -@outMoney money, -@backNum int output -as -begin - select @backNum = (case when CardMoney >= @outMoney then 1 else -1 end) from BankCard - where CardNo = @cardNum - update BankCard set CardMoney -= @outMoney where CardNo = @cardNum -end -go ---执行 -declare @cardNum varchar(50) = '6225547854125656', -@outMoney money = 1000, -@backNum int -exec proc_outMoney @cardNum,@outMoney,@backNum output -select @backNum -select * from BankCard - - ---4. 查询出某时间段的银行存取款信息以及存款总金额**,取款总金额, ---传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 -select * from CardExchange --交易记录 - --- drop proc proc_getBankMessage -go -create proc proc_getBankMessage -@openTime smalldatetime, -@overTime smalldatetime, -@InSum money output, -@OutSum money output -as -begin - select @InSum = SUM(MoneyInBank),@OutSum = SUM(MoneyOutBank) from CardExchange - where ExchangeTime between @openTime and @overTime -end -go - -declare @openTime smalldatetime = '2022-09-07 14:30:00', -@overTime smalldatetime = '2022-09-27 08:19:00', -@InSum money,@OutSum money - -exec proc_getBankMessage @openTime,@overTime,@InSum output,@OutSum output -select @InSum 存款总额,@OutSum 取款总额 - - ---5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 ---(提示:随机生成 0-9 的整数: float(rand()*10)) rand():随机生成0.0-1.0的小数 float:向下取整) - --- drop proc proc_pwd --- update BankCard set CardPwd = '123456' where AccountId = 1 -go -create proc proc_pwd -@cardNo varchar(50), -@pwd varchar(50) -as -begin - if((select CardNo from BankCard where CardNo = @cardNo) != ' ' - and @pwd = (select CardPwd from BankCard where CardNo = @cardNo and @pwd = CardPwd)) - begin - if(len(@pwd) < 8) - begin - update BankCard set CardPwd = CONCAT(ROUND(99999+RAND()*99999,0),ROUND(RAND()*9,0),ROUND(RAND()*9,0)) where CardNo = @cardNo - end - end - else - begin - print '错误了X_X' - end -end -go --- 执行 -declare @cardNo varchar(50) = '6225125478544587',@pwd varchar(50) = '123456' -exec proc_pwd @cardNo,@pwd -select * from BankCard - - - - - diff --git "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" deleted file mode 100644 index 44671b9..0000000 --- "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/SQL-NOTE.md" +++ /dev/null @@ -1,609 +0,0 @@ -# SQL SERVER - -## -- 9.15 - -#### 鍒涘缓鏁版嵁搴 - -```sql -//1 -create database 鏁版嵁搴撳悕; -//2 -if exists (select * from sys.databases where name = '鏁版嵁搴撳悕') -drop database 鏁版嵁搴撳悕; -``` - -#### 鍒涘缓鏁版嵁琛 - -```sql -create table 琛ㄥ悕( - -); -``` - -#### 鍒犻櫎琛 - -```sql -drop table 琛ㄥ悕; -``` - -#### 淇敼琛ㄧ粨鏋 - -```sql -淇敼琛ㄧ粨鏋 琛ㄥ悕 add constraint 绾︽潫鍚 foreign key(瑕佸紩鐢ㄧ殑瀛楁) references 涓婚敭琛(瀛楁) -``` - - - -闈炵┖ not null - -涓婚敭(鏍囪瘑鍒) primary key - -鑷 identity(浠庡嚑寮濮,涓娆″灏) - -妫鏌ョ害鏉 check() - -澶栭敭 references - - - -## --9.16 - -涓嶉噸澶 distinct - -鎺掑簭 order by (desc 闄嶅簭 asc 鍗囧簭) - -**count()** - -count(*):绌哄间篃缁熻 - -count(瀛楁)锛氬綋鍓嶅瓧娈电殑绌哄间笉缁熻 - -**淇濈暀灏忔暟鐐瑰悗鍑犱綅** - -```sql -round(灏忔暟,淇濈暀浣嶆暟); -decimal(5,2); -``` - -**寮哄埗杞崲** - -```sql -CONVERT(VARCHAR(19),GETDATE()); -CAST('9.0' AS decimal); -``` - -**鍒犻櫎** -drop 鍒犻櫎鏁村紶琛 -truncate鍒犻櫎鏁村紶琛紝琛ㄨ繕鍦 - -## --9.16 - -![image-20220920232835355](C:\Users\Agares\AppData\Roaming\Typora\typora-user-images\image-20220920232835355.png) - -### exists - -鍏抽敭瀛桬XISTS鏋勯犲瓙鏌ヨ鏃讹紝褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓嶄负绌烘椂锛屽垯EXISTS杩斿洖鐨勭粨鏋滀负TRUE锛屽灞傛煡璇㈣鍙ヨ繘琛屾煡璇紱褰撳瓙鏌ヨ鐨勭粨鏋滈泦涓虹┖鏃讹紝鍒橢XISTS杩斿洖鐨勭粨鏋滀负FALSE锛屽灞傛煡璇㈣鍙ヤ笉杩涜鏌ヨ銆 - -```sql ---锛1锛夋煡璇㈠鐢熻〃(tb-student)涓紝鏄惁鏈夊鐢熻鑰呯殑濮撳悕鏄"榛勫紭" -if exists(select stu_num from tb_record where stu_num in (select stu_num from tb_student where name='榛勫紭') and return_time is null) - print '鏈' -else - print '娌℃湁' - ---锛2锛夋煡璇功鐩〃(tb-bibliography)涓紝搴撳瓨鏁颁负0鐨勪功鐩悕绉(name) -``` - - - -鎺掑悕 rank() over() - -### 鎺掑簭鍑芥暟 - -**鎺掑簭鍑芥暟 OVER( [鍒嗙粍瀛愬彞] 鎺掑簭瀛愬彞[DESC][ASC] )** - -**鎺掑簭瀛愬彞 锛歄RDER BY 鎺掑簭鍒,鎺掑簭鍒椻** - -缁冧範:浣跨敤鍚勪釜鎺掑悕鍑芥暟瀵瑰鍛樼殑Java 鎴愮哗杩涜鎺掑悕锛屽苟浠旂粏浣撲細鍏朵腑鎺掑簭鍑芥暟鐨勫叿浣撶敤娉曚笌鍏朵腑鐨勫尯鍒 - -```sql - -``` - -- ROW_NUMBER()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑杩炵画鐨勫簭鍙** -- RANK()鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪骞朵笖璺崇┖** -- DENSE_RANK() 鍑芥暟鐢熸垚鐨勬帓搴忔牴鎹帓搴忓瓙鍙ョ粰鍑**閫掑鐨勫簭鍙凤紝浣嗘槸瀛樺湪骞跺垪涓嶈烦绌** - - - - - -### 9-21 - ---鏌ヨ鐢风敓鍜屽コ鐢熶腑骞撮緞鏈澶х殑瀛︾敓淇℃伅锛岃姹傛樉绀猴細濮撳悕锛屾у埆锛屽勾榫 ---闈炲叧鑱斿瓙鏌ヨ - -```sql -select birth,name 濮撳悕,gender 鎬у埆 from tb_student -where birth in (select min(birth) from tb_student group by gender) -``` - ---鍏宠仈瀛愭煡璇細鍐呴儴鏌ヨ闇瑕佸紩鐢ㄥ閮ㄨ〃宸叉煡璇㈠嚭鐨勪俊鎭 - -```sql -select birth,name 濮撳悕,gender 鎬у埆 from tb_student t1 -where birth = (select min(birth) from tb_student t2 where t2.gender=t1.gender) -``` - ---绐楀彛鍑芥暟锛氭帓搴 - -```sql -select birth,濮撳悕,鎬у埆 from ( -select birth,name 濮撳悕,gender 鎬у埆,row_number() over (partition by gender order by birth ) as birth_rank from tb_student -) as T1 -where T1.birth_rank = 1 -``` - - - -### 9-22 - -#### 灞閮ㄥ彉閲 - -灞閮ㄥ彉閲忓繀椤讳互鏍囪@浣滀负鍓嶇紑 锛屽@age -灞閮ㄥ彉閲忕殑浣跨敤鏄厛澹版槑锛屽啀璧嬪 -灞閮ㄥ彉閲忓彧鍦ㄥ畾涔夊畠鐨勫眬閮ㄨ寖鍥村唴鏈夋晥 - -澹版槑涓涓眬閮ㄥ彉閲忥細**declare @鍙橀噺鍚 鏁版嵁绫诲瀷** - -```sql ---渚嬶細 - declare @id int --澹版槑涓涓悕涓篿d鐨勬暣鍨嬪彉閲 - declare @name varchar(50) --澹版槑涓涓彲鍙橀暱搴︿负50鐨勫瓨鏀惧鍚嶇殑瀛楃涓插彉閲 - -``` - -璧嬪硷細 - -- set @鍙橀噺鍚 = 鍊 - -- select @鍙橀噺鍚 = 鍊 - -```sql ---渚: - select @id = 1001 - set @name = '鍛ㄩ' -``` - -set涓巗elect璧嬪肩殑鍖哄埆锛 - -set璧嬪肩粰鍙橀噺鎸囧畾鐨勫硷紝select涓鑸敤浜庤〃涓煡璇㈠嚭鐨勬暟鎹祴鍊肩粰鍙橀噺锛屽鏋滄煡璇㈢粨鏋滄湁澶氭潯锛屽彇鏈鍚庝竴鏉¤祴鍊肩粰鍙橀噺 - -### 杈撳嚭璇彞 - -1. print鍙橀噺鎴栬〃杈惧紡 -2. select鍙橀噺鎴栬〃杈惧紡 - -```sql ---渚: - print '鏁版嵁搴撴湇鍔″櫒鍚:' + @@servicename - select 15*8 -``` - -### 閫昏緫鎺у埗璇彞 - -```sql --- if() else -if() -begin - ... -end -else - ... -end - --- switch case -case -when 鏉′欢 then 缁撴灉 -else 鍏朵粬缁撴灉 -end -``` - -### 寰幆鎺у埗璇彞 - -```sql -while() -begin - ... -end -``` - - - -## --9.26 - -### 瑙嗗浘 - -瑙嗗浘鏄竴寮犺櫄鎷熻〃锛屽畠琛ㄧず涓寮犺〃鐨勯儴鍒嗘暟鎹垨澶氬紶琛ㄧ殑缁煎悎鏁版嵁锛屽叾缁撴瀯鍜屾暟鎹槸寤虹珛鍦ㄥ琛ㄧ殑鏌ヨ鍩虹涓 -瑙嗗浘涓苟涓嶅瓨鏀炬暟鎹紝鑰屾槸瀛樻斁鍦ㄨ鍥炬墍寮曠敤鐨勫師濮嬭〃锛堝熀琛級涓紝鍗冲熀鏈腑鐨勬暟鎹彂鐢熷彉鍖栵紝浠庤鍥句腑鏌ヨ鐨勬暟鎹篃闅忎箣鏀瑰彉銆 -鍚屼竴寮犲師濮嬭〃锛屾牴鎹笉鍚岀敤鎴风殑涓嶅悓闇姹傦紝鍙互鍒涘缓涓嶅悓鐨勮鍥 - -```sql ---寤虹珛瑙嗗浘 -create view <瑙嗗浘鍚> [(<鍒楀悕>[,<鍒楀悕>]...)] - as <瀛愭煡璇> [with check option] -``` - -### pivot(琛岃浆鍒) - -```sql -pivot( -鏁版嵁 for 瑕佽浆鎴愬垪鐨勭帺鎰 in (鍒楀悕1,鍒楀悕2,...) -) as 鍚嶅瓧 -``` - -### union(鍒楄浆琛) - -```sql ---union锛屾嫾鎺ュ琛 -select * from 琛1 -union -select * from 琛2 - ---unpivot锛屼粈涔堢帺鎰 -unpivot( -score for subject in(english,maths,music) -)as v -``` - - - -## --9.28 - -### 浜嬪姟 - -**浜嬪姟锛 Transaction锛夌敱涓娆℃垨鑰呭娆″熀鏈搷浣滄瀯鎴愶紝鎴栬呰锛屼簨鍔$敱涓鏉℃垨鑰呭鏉 SQL 璇彞鏋勬垚銆** - -**浜嬪姟涓殑鎵鏈 SQL 璇彞鏄竴涓暣浣擄紝鍏卞悓杩涢锛屼笉鍙垎鍓诧紝瑕佷箞鍏ㄩ儴鎵ц鎴愬姛锛岃涔堝叏閮ㄦ墽琛屽け璐ャ** - - - -#### 浜嬪姟鐨勫睘鎬(ACID) - -##### 1) 鍘熷瓙鎬 **A**tomicity - -涓涓簨鍔′腑鐨勬墍鏈 SQL 璇彞锛岃涔堝叏閮ㄦ墽琛屾垚鍔燂紝瑕佷箞鍏ㄩ儴鎵ц澶辫触锛屼笉浼氱粨鏉熷湪涓棿鐨勬煇涓幆鑺傘備簨鍔″湪鎵ц杩囩▼涓彂鐢熼敊璇紝浼氳鍥炴粴锛圧ollback锛夊埌浜嬪姟寮濮嬪墠鐨勭姸鎬 - -##### 2) 涓鑷存 **C**onsistency - -鍦ㄤ簨鍔″紑濮嬩箣鍓嶅拰浜嬪姟缁撴潫浠ュ悗锛屾暟鎹簱鐨勫畬鏁存ф病鏈夎鐮村潖銆傝繖琛ㄧず鍐欏叆鐨勬暟鎹繀椤诲畬鍏ㄧ鍚堟墍鏈夌殑棰勮瑙勫垯锛屽叾涓寘鍚暟鎹殑绮剧‘搴︺佷覆鑱旀т互鍙婂悗缁暟鎹簱鍙互鑷彂鎬у湴瀹屾垚棰勫畾鐨勫伐浣溿 - -##### 3) 闅旂鎬 **I**solation - -鏁版嵁搴撳厑璁稿涓苟鍙戜簨鍔″悓鏃跺鍏舵暟鎹繘琛岃鍐欏拰淇敼鐨勮兘鍔涳紝闅旂鎬у彲浠ラ槻姝㈠涓簨鍔″苟鍙戞墽琛屾椂鐢变簬浜ゅ弶鎵ц鑰屽鑷存暟鎹殑涓嶄竴鑷淬 - -##### 4) 鎸佷箙鎬 **D**urability - -浜嬪姟澶勭悊缁撴潫鍚庯紝瀵规暟鎹殑淇敼灏辨槸姘镐箙鐨勶紝鍗充究绯荤粺鏁呴殰涔熶笉浼氫涪澶便 - -### - -```sql ---寮濮嬩簨鍔 -begin tran ---閿欒浠g爜 -declare @err int = 0 - ---浜嬪姟鎻愪氦锛氬鏋滆鍙ラ兘鎵ц鎴愬姛锛 commit tran/transaction -if (@myerr = 0) - begin - commit transaction A - end ---浜嬪姟鍥炴粴锛氬鏋滀簨鍔′腑鏈変竴鏉¤鍙ユ墽琛屽け璐ワ紝 rollback tran/transaction -else - begin - rollback transaction B - end - - --select * from Products ---print @@error --閿欒鐮:0:鎵ц鎴愬姛 闈0鐨勬椂鍊欎唬琛ㄨ璇彞鏈夐敊璇 - ---鏍囪浜嬪姟鍥炴粴璧风偣 锛 save tran B - ---鏂规硶2: -----begin try ----- --浜嬪姟鐨勫紑濮嬶細begin tran ----- --sql璇彞 ----- commit --鎻愪氦 -----end try - -----begin catch --鎹曡幏閿欒,濡傛灉鏌愭潯璇彞鎵ц閿欒锛屽皢琚崟鑾 ----- rollback tran -----end -``` - - - -## --9.30 娓告爣 Cursor - -### - -娓告爣鍙互浣跨敤鎴烽愯璁块棶鐢盨QL Server杩斿洖鐨勭粨鏋滈泦锛岃兘鎶婇泦鍚堟搷浣滆浆鎹㈡垚**鍗曚釜璁板綍澶勭悊鏂瑰紡**锛屾寜鐓х敤鎴疯嚜宸辩殑鎰忔効鏉ユ樉绀哄拰澶勭悊杩欎簺璁板綍銆 - -#### 娓告爣鍒嗙被: - -锛1锛夐潤鎬佹父鏍(Static)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝鏁版嵁鍙戠敓鍙樺寲锛屾父鏍囦腑鏁版嵁涓嶅彉 -锛2锛夊姩鎬佹父鏍(Dynamic)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝鏁版嵁鍙戠敓鍙樺寲锛屾父鏍囦腑鏁版嵁鏀瑰彉锛岄粯璁ゅ笺 -锛3锛夐敭闆嗛┍鍔ㄦ父鏍(KeySet)锛氬湪鎿嶄綔娓告爣鐨勬椂鍊欙紝琚爣璇嗙殑鍒楀彂鐢熸敼鍙橈紝娓告爣涓暟鎹敼鍙橈紝鍏朵粬鍒楁敼鍙橈紝娓告爣涓暟鎹笉鍙樸 - -#### 娓告爣鐨勪娇鐢 - -```sql - ---鍒涘缓娓告爣(Scroll浠h〃婊氬姩娓告爣锛屼笉鍔燬croll鍒欐槸鍙繘鐨勶紝鍙兘鏀寔fetch next) -declare <娓告爣鍚> cursor scroll for select stuname from stuinfo - ---鎵撳紑娓告爣锛 -open <娓告爣鍚> - ---鍏抽棴娓告爣 -close <娓告爣鍚> - ---鍒犻櫎娓告爣 -deallocate <娓告爣鍚> - ---鎻愬彇鏁版嵁鎿嶄綔 -fetch first from <娓告爣鍚> --缁撴灉闆嗙殑绗竴琛 -fetch last from <娓告爣鍚> --鏈鍚庝竴琛 -fetch absolute 1 from <娓告爣鍚> --浠庢父鏍囩殑绗竴琛屽紑濮嬫暟锛岀n琛屻 -fetch relative 3 from <娓告爣鍚> --浠庡綋鍓嶄綅缃暟锛岀n琛屻 -fetch next from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笅涓琛 -fetch prior from <娓告爣鍚> --褰撳墠浣嶇疆鐨勪笂涓琛 -``` - - - -**鎻愬彇鏁版嵁缁欏彉閲忎互渚涘畠鐢紙鍙栧嚭绗3琛屽鐢熷鍚嶏紝鏌ヨ璇ュ鐢熻缁嗕俊鎭級锛** - -```sql -declare @vari varchar(20) -fetch absolute 3 from <娓告爣鍚> into @vari -select * from StuInfo where stuName = @vari -``` - -**鍒╃敤娓告爣鎻愬彇鎵鏈夌殑瀛︾敓淇℃伅锛** - -```sql ---鏂规涓锛 -fetch absolute 1 from <娓告爣鍚> -while @@FETCH_STATUS = 0 --@@FETCH_STATUS=0,鎻愬彇鎴愬姛锛-1鎻愬彇澶辫触锛-2琛屼笉瀛樺湪 - begin - fetch next from <娓告爣鍚> - end - ---鏂规浜岋細 -declare @myvar varchar(20) -fetch first from <娓告爣鍚> into @myvar -while @@FETCH_STATUS = 0 - begin - print '鎻愬彇鎴愬姛'+@myvar - fetch next from <娓告爣鍚> into @myvar - end -``` - -**鍒╃敤娓告爣淇敼鍜屽垹闄ゆ暟鎹細** - -```sql ---鏇存柊璇硶: --- fetch absolute 3 from <娓告爣鍚> --- update 璇彞 where Current of <娓告爣鍚> - -``` - - - -## --10.6 鍑芥暟 - -### 鍒嗙被 - -锛1锛夌郴缁熷嚱鏁 - -锛2锛夎嚜瀹氫箟鍑芥暟(鏂规硶锛氬皢涓涓姛鑳藉皝瑁呮垚鍙噸鐢ㄧ殑鍑芥暟)銆 - -鍏朵腑鑷畾涔夊嚱鏁板張鍙互鍒嗕负锛1锛夋爣閲忓煎嚱鏁帮紙杩斿洖鍗曚釜鍊硷級锛岋紙2锛夎〃鍊煎嚱鏁帮紙杩斿洖鏌ヨ缁撴灉锛 - - - -#### 鏍囬噺鍊煎嚱鏁 - -```sql -CREATE FUNCTION function_name(@parameter_name parameter_data_type) --锛園鍙傛暟鍚 鍙傛暟鐨勬暟鎹被鍨嬶級 -RETURNS date_type --杩斿洖杩斿洖鍊肩殑鏁版嵁绫诲瀷 - -[AS] - -BEGIN - - function_body --鍑芥暟浣 - - RETURN 琛ㄨ揪寮; --蹇呴』瑕佹湁鐨 - -END -``` - -#### 琛ㄥ煎嚱鏁 - -```sql -create function 鍚嶇О - -([{@鍙傛暟鍚嶇О 鍙傛暟绫诲瀷[=榛樿鍊糫}[,n]]) - -returns @灞閮ㄥ彉閲 table锛堝弬鏁板悕 鍙傛暟绫诲瀷锛 - -[with encryption] - -[as] - -begin - -鍑芥暟浣 - -return 鍑芥暟杩斿洖鍊 - -end -``` - - - -鍒犻櫎鑷畾涔夊嚱鏁 - -```sql -DROP function 鍑芥暟鍚 -``` - - - -## -- 10.7 瀛樺偍杩囩▼(Stored Procedure) - - - -瀛樺偍杩囩▼鏄**棰勭紪璇**SQL璇彞闆嗗悎锛岃繖浜涜鍙ュ瓨鍌ㄥ湪涓涓悕绉帮紙瀛樺偍杩囩▼鐨勫悕绉帮級涓嬪苟浣滀负鍗曞厓鏉ュ鐞嗐傚瓨鍌ㄨ繃绋嬩唬鏇夸簡浼犵粺鐨勯愭潯鎵цSQL璇彞鐨勬柟寮忥紝涓涓瓨鍌ㄨ繃绋嬩腑鍙互鍖呭惈鏌ヨ銆佹彃鍏ャ佸垹闄ゃ佹洿鏂扮瓑鎿嶇旱鐨勪竴绯诲垪SQL璇彞锛屽綋杩欎釜瀛樺偍杩囩▼琚皟鐢ㄦ墽琛屾椂锛岃繖浜涙搷浣滀篃浼氬悓鏃舵墽琛屻 - -灏佽濂 --> 璋冪敤 - -#### 瀛樺偍杩囩▼鐨勫垎绫 - -##### 绯荤粺瀛樺偍杩囩▼ - - 绯荤粺瀛樺偍杩囩▼鏄敤鏉ョ鐞哠QL Server涓庢樉绀烘湁鍏虫暟鎹簱鍜岀敤鎴风殑淇℃伅鐨勫瓨鍌ㄨ繃绋嬨 - -```sql -sp_databases 鍒楀嚭鏈嶅姟涓婄殑鎵鏈夋暟鎹簱 -sp_helpdb --鎶ュ憡鏈夊叧鎸囧畾鏁版嵁搴撴垨鎵鏈夋暟鎹簱鐨勪俊鎭 -sp_renamedb 鏇存敼鏁版嵁搴撶殑鍚嶇О -sp_tables --杩斿洖褰撳墠鐜涓嬪彲鏌ヨ鐨勫璞$殑鍒楄〃 -sp_columns 杩斿洖鏌愪釜琛ㄥ垪鐨勪俊鎭 -sp_help --杩斿洖鏌愪釜琛ㄧ殑鎵鏈変俊鎭 -sp_helpconstraint 鏌ョ湅鏌愪釜琛ㄧ殑绾︽潫 -sp_helpindex --鏌ョ湅鏌愪釜琛ㄧ殑绱㈠紩 -sp_stored_procedures 鍒楀嚭褰撳墠鐜涓殑鎵鏈夊瓨鍌ㄨ繃绋 -sp_password --娣诲姞鎴栦慨鏀圭櫥褰曡处鎴风殑瀵嗙爜 -sp_rename 閲嶅懡鍚嶅瓨鍌ㄨ繃绋 -sp_helptext 鏄剧ず榛樿鍊硷紝鏈姞瀵嗙殑瀛樺偍杩囩▼銆佺敤鎴峰畾涔夌殑瀛樺偍杩囩▼銆佽Е鍙戝櫒鎴栬鍥剧殑瀹為檯鏂囨湰銆 -``` - - - -##### 鑷畾涔夊瓨鍌ㄨ繃绋 - -**鍒涘缓瀛樺偍杩囩▼** - -1.娌℃湁杈撳叆鍙傛暟锛屾病鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼銆 - -```sql -create proc <瀛樺偍杩囩▼鍚嶇О> -as - -go -``` - -2.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟鐨勫瓨鍌ㄨ繃绋 - -```sql -create proc <瀛樺偍杩囩▼鍚嶇О> -<鍙橀噺1> <鏁版嵁绫诲瀷> -<鍙橀噺2> <鏁版嵁绫诲瀷> -... -as - -go -``` - -3.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟锛屼絾鏄湁杩斿洖鍊肩殑瀛樺偍杩囩▼锛堣繑鍥炲煎繀椤绘暣鏁帮級銆 - -```sql -create proc <瀛樺偍杩囩▼鍚嶇О> -<鍙橀噺1> <鏁版嵁绫诲瀷> -<鍙橀噺2> <鏁版嵁绫诲瀷> -... -as - -return 鏁存暟 -go -``` - -4.鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ & 涓涓彉閲忓叿澶囧悓鏃惰緭鍏ヨ緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ - -```sql -create proc <瀛樺偍杩囩▼鍚嶇О> -<鍙橀噺1> <鏁版嵁绫诲瀷> output -<鍙橀噺2> <鏁版嵁绫诲瀷> output -... -as - -return 鏁存暟 -go -``` - - - -**鎵ц瀛樺偍杩囩▼** - -```sql ---鏃犲弬 -exec <瀛樺偍杩囩▼鍚嶇О> ---甯﹀弬 -exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... ---甯﹀弬甯﹁繑鍥炲 -declare @鍙橀噺 -exec @鍙橀噺 = <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... ---鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ -declare @鍙橀噺 -exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output ---涓涓彉閲忓悓鏃跺叿澶囪緭鍏ヨ緭鍑哄姛鑳 -declare @鍙橀噺 <鏁版嵁绫诲瀷> = 鍊 -exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output -``` - - - -**鍒犻櫎瀛樺偍杩囩▼** - -```sql -drop procedure <瀛樺偍杩囩▼鍚嶇О> -``` - - - -#### 瀛樺偍杩囩▼鐨勪紭鐐 - -鍏佽妯″潡鍖栫▼搴忚璁 - -鎵ц閫熷害鏇村揩 - -鍑忓皯缃戠粶娴侀氶噺 - -鎻愰珮绯荤粺瀹夊叏鎬 - - - -#### 瀛樺偍杩囩▼涓庡嚱鏁扮殑鍖哄埆 - -1.鍌ㄥ瓨杩囩▼鍙互鏈夎繑鍥炲间篃鍙互鏃犺繑鍥炲笺傚嚱鏁板繀椤绘湁杩斿洖鍊笺 - -2.瀛樺偍杩囩▼鐨勫疄鐜版瘮杈冨鏉傦紝鑰屽嚱鏁扮殑瀹炵幇姣旇緝鏈夐拡瀵规с - -3.鍌ㄥ瓨杩囩▼鍙互杈撳叆杈撳嚭鍙傛暟锛岃屽嚱鏁板彧鍙互杈撳叆鍙傛暟銆 - -4.杩囩▼鍏佽鍦ㄥ叾涓夋嫨浠ュ強DML璇彞锛岃屽嚱鏁板彧鍙互鍦ㄥ叾涓璼elect璇彞銆 - -5.鍙互鍦ㄥ瓨鍌ㄨ繃绋嬩腑璋冪敤鍑芥暟锛屼笉鍙互鍦ㄥ嚱鏁颁腑璋冪敤瀛樺偍杩囩▼銆 - -6.鍑芥暟鍙互浣滀负鏉′欢鍦ㄨ鍙ヤ腑浣跨敤锛屼絾鏄瓨鍌ㄨ繃绋嬩笉鍙互銆 - - - - - - - -- Gitee From 235ec8c716024e9a2186812f48bd6c893ecfe90b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B7=91=E8=8A=B3?= <2025575070@qq.com> Date: Sun, 9 Oct 2022 17:11:07 +0000 Subject: [PATCH 3/4] =?UTF-8?q?=E6=96=B0=E5=BB=BA=2010-7-=E5=AD=98?= =?UTF-8?q?=E5=82=A8=E8=BF=87=E7=A8=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../10-7-\345\255\230\345\202\250\350\277\207\347\250\213/.keep" | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 "24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/.keep" diff --git "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/.keep" "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/.keep" new file mode 100644 index 0000000..e69de29 -- Gitee From 0146befc24470da710f78fd1a8ba20b17cacda23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E6=B7=91=E8=8A=B3?= <2025575070@qq.com> Date: Sun, 9 Oct 2022 17:11:37 +0000 Subject: [PATCH 4/4] 10.7 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 寮犳窇鑺 <2025575070@qq.com> --- .../10-7-\344\275\234\344\270\232.sql" | 129 ++++++++++++++++ ...30\345\202\250\350\277\207\347\250\213.md" | 146 ++++++++++++++++++ 2 files changed, 275 insertions(+) create mode 100644 "24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" create mode 100644 "24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\347\254\224\350\256\260-\345\255\230\345\202\250\350\277\207\347\250\213.md" diff --git "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" new file mode 100644 index 0000000..29a15ac --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\344\275\234\344\270\232.sql" @@ -0,0 +1,129 @@ + +use BankTest +go + +--1. 定义存储过程实现查询出账户余额最低的银行卡账户信息,显示银行卡号,姓名,账户余额 +select * from BankCard +go +-- drop proc proc_getMinMoney +create proc proc_getMinMoney +@minMoney money output +as +begin + select @minMoney = MIN(CardMoney) from BankCard + select CardNo,RealName,CardMoney from BankCard b + join AccountInfo a on a.AccountId = b.AccountId + where CardMoney = @minMoney +end +go + +declare @minMoney money +exec proc_getMinMoney @minMoney output + + + +--2. 模拟银行卡存钱操作,传入银行卡号,存钱金额,实现存钱操作 +select * from CardExchange +go +create proc proc_getInMoney +@cardNo varchar(50), +@inMoney money +as +begin + insert into CardExchange values(@cardNo,@inMoney,0,GETDATE()) + +end +go +-- +declare @cardNo varchar(50) = '6225125478544587', + @inMoney money = 8848 +exec proc_getInMoney @cardNo,@inMoney +select * from CardExchange + + + +--3. 模拟银行卡取钱操作,传入银行卡号,取钱金额,实现取钱操作,取钱成功,返回1,取钱失败返回-1 +select * from BankCard +go +-- drop proc proc_outMoney + +create proc proc_outMoney +@cardNum varchar(50), +@outMoney money, +@backNum int output +as +begin + select @backNum = (case when CardMoney >= @outMoney then 1 else -1 end) from BankCard + where CardNo = @cardNum + update BankCard set CardMoney -= @outMoney where CardNo = @cardNum +end +go +--执行 +declare @cardNum varchar(50) = '6225547854125656', +@outMoney money = 1000, +@backNum int +exec proc_outMoney @cardNum,@outMoney,@backNum output +select @backNum +select * from BankCard + + +--4. 查询出某时间段的银行存取款信息以及存款总金额**,取款总金额, +--传入开始时间,结束时间,显示存取款交易信息的同时,返回存款总金额,取款总金额。 +select * from CardExchange --交易记录 + +-- drop proc proc_getBankMessage +go +create proc proc_getBankMessage +@openTime smalldatetime, +@overTime smalldatetime, +@InSum money output, +@OutSum money output +as +begin + select @InSum = SUM(MoneyInBank),@OutSum = SUM(MoneyOutBank) from CardExchange + where ExchangeTime between @openTime and @overTime +end +go + +declare @openTime smalldatetime = '2022-09-07 14:30:00', +@overTime smalldatetime = '2022-09-27 08:19:00', +@InSum money,@OutSum money + +exec proc_getBankMessage @openTime,@overTime,@InSum output,@OutSum output +select @InSum 存款总额,@OutSum 取款总额 + + +--5. **密码升级**,传入用户名和密码,如果用户名密码正确,并且密码长度<8,自动升级成8位密码 +--(提示:随机生成 0-9 的整数: float(rand()*10)) rand():随机生成0.0-1.0的小数 float:向下取整) + +-- drop proc proc_pwd +-- update BankCard set CardPwd = '123456' where AccountId = 1 +go +create proc proc_pwd +@cardNo varchar(50), +@pwd varchar(50) +as +begin + if((select CardNo from BankCard where CardNo = @cardNo) != ' ' + and @pwd = (select CardPwd from BankCard where CardNo = @cardNo and @pwd = CardPwd)) + begin + if(len(@pwd) < 8) + begin + update BankCard set CardPwd = CONCAT(ROUND(99999+RAND()*99999,0),ROUND(RAND()*9,0),ROUND(RAND()*9,0)) where CardNo = @cardNo + end + end + else + begin + print '错误了X_X' + end +end +go +-- 执行 +declare @cardNo varchar(50) = '6225125478544587',@pwd varchar(50) = '123456' +exec proc_pwd @cardNo,@pwd +select * from BankCard + + + + + diff --git "a/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\347\254\224\350\256\260-\345\255\230\345\202\250\350\277\207\347\250\213.md" "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\347\254\224\350\256\260-\345\255\230\345\202\250\350\277\207\347\250\213.md" new file mode 100644 index 0000000..0995c26 --- /dev/null +++ "b/24\345\274\240\346\267\221\350\212\263/10-7-\345\255\230\345\202\250\350\277\207\347\250\213/10-7-\347\254\224\350\256\260-\345\255\230\345\202\250\350\277\207\347\250\213.md" @@ -0,0 +1,146 @@ + + +## -- 10.7 瀛樺偍杩囩▼(Stored Procedure) + + + +瀛樺偍杩囩▼鏄**棰勭紪璇**SQL璇彞闆嗗悎锛岃繖浜涜鍙ュ瓨鍌ㄥ湪涓涓悕绉帮紙瀛樺偍杩囩▼鐨勫悕绉帮級涓嬪苟浣滀负鍗曞厓鏉ュ鐞嗐傚瓨鍌ㄨ繃绋嬩唬鏇夸簡浼犵粺鐨勯愭潯鎵цSQL璇彞鐨勬柟寮忥紝涓涓瓨鍌ㄨ繃绋嬩腑鍙互鍖呭惈鏌ヨ銆佹彃鍏ャ佸垹闄ゃ佹洿鏂扮瓑鎿嶇旱鐨勪竴绯诲垪SQL璇彞锛屽綋杩欎釜瀛樺偍杩囩▼琚皟鐢ㄦ墽琛屾椂锛岃繖浜涙搷浣滀篃浼氬悓鏃舵墽琛屻 + +灏佽濂 --> 璋冪敤 + +#### 瀛樺偍杩囩▼鐨勫垎绫 + +##### 绯荤粺瀛樺偍杩囩▼ + + 绯荤粺瀛樺偍杩囩▼鏄敤鏉ョ鐞哠QL Server涓庢樉绀烘湁鍏虫暟鎹簱鍜岀敤鎴风殑淇℃伅鐨勫瓨鍌ㄨ繃绋嬨 + +```sql +sp_databases 鍒楀嚭鏈嶅姟涓婄殑鎵鏈夋暟鎹簱 +sp_helpdb --鎶ュ憡鏈夊叧鎸囧畾鏁版嵁搴撴垨鎵鏈夋暟鎹簱鐨勪俊鎭 +sp_renamedb 鏇存敼鏁版嵁搴撶殑鍚嶇О +sp_tables --杩斿洖褰撳墠鐜涓嬪彲鏌ヨ鐨勫璞$殑鍒楄〃 +sp_columns 杩斿洖鏌愪釜琛ㄥ垪鐨勪俊鎭 +sp_help --杩斿洖鏌愪釜琛ㄧ殑鎵鏈変俊鎭 +sp_helpconstraint 鏌ョ湅鏌愪釜琛ㄧ殑绾︽潫 +sp_helpindex --鏌ョ湅鏌愪釜琛ㄧ殑绱㈠紩 +sp_stored_procedures 鍒楀嚭褰撳墠鐜涓殑鎵鏈夊瓨鍌ㄨ繃绋 +sp_password --娣诲姞鎴栦慨鏀圭櫥褰曡处鎴风殑瀵嗙爜 +sp_rename 閲嶅懡鍚嶅瓨鍌ㄨ繃绋 +sp_helptext 鏄剧ず榛樿鍊硷紝鏈姞瀵嗙殑瀛樺偍杩囩▼銆佺敤鎴峰畾涔夌殑瀛樺偍杩囩▼銆佽Е鍙戝櫒鎴栬鍥剧殑瀹為檯鏂囨湰銆 +``` + + + +##### 鑷畾涔夊瓨鍌ㄨ繃绋 + +**鍒涘缓瀛樺偍杩囩▼** + +1.娌℃湁杈撳叆鍙傛暟锛屾病鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼銆 + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +as + +go +``` + +2.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟鐨勫瓨鍌ㄨ繃绋 + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +go +``` + +3.鏈夎緭鍏ュ弬鏁帮紝娌℃湁杈撳嚭鍙傛暟锛屼絾鏄湁杩斿洖鍊肩殑瀛樺偍杩囩▼锛堣繑鍥炲煎繀椤绘暣鏁帮級銆 + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> +<鍙橀噺2> <鏁版嵁绫诲瀷> +... +as + +return 鏁存暟 +go +``` + +4.鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ & 涓涓彉閲忓叿澶囧悓鏃惰緭鍏ヨ緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ + +```sql +create proc <瀛樺偍杩囩▼鍚嶇О> +<鍙橀噺1> <鏁版嵁绫诲瀷> output +<鍙橀噺2> <鏁版嵁绫诲瀷> output +... +as + +return 鏁存暟 +go +``` + + + +**鎵ц瀛樺偍杩囩▼** + +```sql +--鏃犲弬 +exec <瀛樺偍杩囩▼鍚嶇О> +--甯﹀弬 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--甯﹀弬甯﹁繑鍥炲 +declare @鍙橀噺 +exec @鍙橀噺 = <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,... +--鏈夎緭鍏ュ弬鏁帮紝鏈夎緭鍑哄弬鏁扮殑瀛樺偍杩囩▼ +declare @鍙橀噺 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +--涓涓彉閲忓悓鏃跺叿澶囪緭鍏ヨ緭鍑哄姛鑳 +declare @鍙橀噺 <鏁版嵁绫诲瀷> = 鍊 +exec <瀛樺偍杩囩▼鍚嶇О> <褰㈠弬1>,<褰㈠弬2>,@鍙橀噺 output +``` + + + +**鍒犻櫎瀛樺偍杩囩▼** + +```sql +drop procedure <瀛樺偍杩囩▼鍚嶇О> +``` + + + +#### 瀛樺偍杩囩▼鐨勪紭鐐 + +鍏佽妯″潡鍖栫▼搴忚璁 + +鎵ц閫熷害鏇村揩 + +鍑忓皯缃戠粶娴侀氶噺 + +鎻愰珮绯荤粺瀹夊叏鎬 + + + +#### 瀛樺偍杩囩▼涓庡嚱鏁扮殑鍖哄埆 + +1.鍌ㄥ瓨杩囩▼鍙互鏈夎繑鍥炲间篃鍙互鏃犺繑鍥炲笺傚嚱鏁板繀椤绘湁杩斿洖鍊笺 + +2.瀛樺偍杩囩▼鐨勫疄鐜版瘮杈冨鏉傦紝鑰屽嚱鏁扮殑瀹炵幇姣旇緝鏈夐拡瀵规с + +3.鍌ㄥ瓨杩囩▼鍙互杈撳叆杈撳嚭鍙傛暟锛岃屽嚱鏁板彧鍙互杈撳叆鍙傛暟銆 + +4.杩囩▼鍏佽鍦ㄥ叾涓夋嫨浠ュ強DML璇彞锛岃屽嚱鏁板彧鍙互鍦ㄥ叾涓璼elect璇彞銆 + +5.鍙互鍦ㄥ瓨鍌ㄨ繃绋嬩腑璋冪敤鍑芥暟锛屼笉鍙互鍦ㄥ嚱鏁颁腑璋冪敤瀛樺偍杩囩▼銆 + +6.鍑芥暟鍙互浣滀负鏉′欢鍦ㄨ鍙ヤ腑浣跨敤锛屼絾鏄瓨鍌ㄨ繃绋嬩笉鍙互銆 + + + + + + + -- Gitee