锘??xml version="1.0" encoding="utf-8" standalone="yes"?> 娉ㄩ噴 娉ㄩ噴 娉ㄩ噴 鏈夋椂鍊欓渶瑕佹壒閲忓悓姝ユ暟鎹簱鐨刣efault value 綰︽潫(constraint)錛屽湪SQL2005涓紝鍙互閫氳繃sys.default_constraints緋葷粺瑙嗗浘鏉ヨ幏鍙栬鏁版嵁搴撶殑瑙嗗浘鎴栬呮煇涓〃瀵瑰簲鐨勮鍥俱? 璇ヨ鍥鵑粯璁ゅ搴斿瓧孌? name錛氱害鏉熷悕 濡備笅SQL鏌ヨdefaulttest鏁版嵁搴撲腑test1琛ㄦ墍鏈夌殑default value constraints 銆? SELECT * FROM sys.default_constraints WHERE sys.default_constraints.parent_object_id=OBJECT_ID('test1') 淇敼甯︽湁綰︽潫鐨勬暟鎹〃緇撴瀯璁蹭簡濡備綍鍒犻櫎鍜屾坊鍔犵害鏉燂紝涓嬮潰鐨勮鍙ヤ細鍒楀嚭鎵鏈夌殑default value constraint銆? SELECT 鐒跺悗浣跨敤娓告爣閬嶅巻鍒犻櫎瀵瑰簲琛ㄧ殑綰︽潫鍗沖彲
褰?SET XACT_ABORT 涓?ON 鏃訛紝濡傛灉 Transact-SQL 璇彞浜х敓榪愯鏃墮敊璇紝鏁翠釜浜嬪姟灝嗙粓姝㈠茍鍥炴粴銆備負 OFF 鏃訛紝鍙洖婊氫駭鐢熼敊璇殑 Transact-SQL 璇彞錛岃屼簨鍔″皢緇х畫榪涜澶勭悊銆傜紪璇戦敊璇紙濡傝娉曢敊璇級涓嶅彈 SET XACT_ABORT 鐨勫獎鍝嶃?br />
SET QUOTED_IDENTIFIER{ ON | OFF }
褰?SET QUOTED_IDENTIFIER 涓?ON 鏃訛紝鏍囪瘑絎﹀彲浠ョ敱鍙屽紩鍙峰垎闅旓紝鑰屾枃瀛楀繀欏葷敱鍗曞紩鍙峰垎闅斻傚綋 SET QUOTED_IDENTIFIER 涓?OFF 鏃訛紝鏍囪瘑絎︿笉鍙姞寮曞彿錛屼笖蹇呴』絎﹀悎鎵鏈?Transact-SQL 鏍囪瘑絎﹁鍒欍?/p>
SET ANSI_NULLS { ON | OFF }
SQL-92 鏍囧噯瑕佹眰鍦ㄥ絀哄艱繘琛岀瓑浜?(=) 鎴栦笉絳変簬 (<>) 姣旇緝鏃跺彇鍊間負 FALSE銆傚綋 SET ANSI_NULLS 涓?ON 鏃訛紝鍗充嬌 column_name 涓寘鍚┖鍊鹼紝浣跨敤 WHERE column_name = NULL 鐨?SELECT 璇彞浠嶈繑鍥為浂琛屻傚嵆浣?column_name 涓寘鍚潪絀哄鹼紝浣跨敤 WHERE column_name <> NULL 鐨?SELECT 璇彞浠嶄細榪斿洖闆惰銆?
褰?SET ANSI_NULLS 涓?OFF 鏃訛紝絳変簬 (=) 鍜屼笉絳変簬 (<>) 姣旇緝榪愮畻絎︿笉閬典粠 SQL-92 鏍囧噯銆備嬌鐢?WHERE column_name = NULL 鐨?SELECT 璇彞榪斿洖 column_name 涓寘鍚┖鍊肩殑琛屻備嬌鐢?WHERE column_name <> NULL 鐨?SELECT 璇彞榪斿洖鍒椾腑鍖呭惈闈炵┖鍊肩殑琛屻傛澶栵紝浣跨敤 WHERE column_name <> XYZ_value 鐨?SELECT 璇彞榪斿洖鎵鏈変笉涓?XYZ_value 涔熶笉涓?NULL 鐨勮銆?
]]>
]]>
select id, name, coden
from cims_supplier
where name like 'A%'
and coden like 'A%'
union
select cdbregno as id,
dbms_lob.substr(supplier_name,2000,1) as name,
coden as coden
from acdsupplier_moltable
where supplier_name like 'A%'
and coden like 'A%'
cims_supplier琛ㄤ腑鐨刵ame鏄痸archar2綾誨瀷, 鑰宎cdsupplier_moltable琛ㄤ腑鐨剆upplier_name涓篶lob綾誨瀷, 榪欐牱灝卞彲浠nion浜?
褰撶劧鎺掑簭涔熷彲浠ヤ簡.
select * from t1 order by dbms_lob.substr(clobcloum,2000,1);
]]>
object_id 錛氱害鏉烮D
parent_object_id錛氱害鏉熷搴旂殑琛↖D
parent_column_id錛氱害鏉熷搴旇〃涓殑絎嚑鍒?
definition錛氶粯璁ゅ?
sys.default_constraints.name AS name,
sys.[tables].name AS tablename
FROM sys.default_constraints
LEFT JOIN sys.tables ON
sys.[tables].object_id=sys.[default_constraints].parent_object_id
]]>
渚嬶紝鏈夊涓嬫洿鏂版潯浠?
寰堝鏄撹冭檻鐨勬槸閫夋嫨鎵ц涓ゆUPDATE璇彞錛屽涓嬫墍紺?
--鏉′歡1
UPDATE Personnel
SET salary = salary * 0.9
WHERE salary >= 5000;
--鏉′歡2
UPDATE Personnel
SET salary = salary * 1.15
WHERE salary >= 2000 AND salary < 4600;
浣嗘槸浜嬫儏娌℃湁鎯寵薄寰楅偅涔堢畝鍗曪紝鍋囪鏈変釜浜哄伐璧?000鍧椼傞鍏堬紝鎸夌収鏉′歡1錛屽伐璧勫噺灝?0%錛屽彉鎴愬伐璧?500銆傛帴涓嬫潵榪愯絎簩涓猄QL鏃跺欙紝鍥犱負榪欎釜浜虹殑宸ヨ祫鏄?500鍦?000鍒?600鐨勮寖鍥翠箣鍐咃紝 闇澧炲姞15%錛屾渶鍚庤繖涓漢鐨勫伐璧勭粨鏋滄槸5175,涓嶄絾娌℃湁鍑忓皯錛屽弽鑰屽鍔犱簡銆傚鏋滆鏄弽榪囨潵鎵ц錛岄偅涔堝伐璧?600鐨勪漢鐩稿弽浼氬彉鎴愬噺灝戝伐璧勩傛殏涓斾笉綆¤繖涓绔犳槸澶氫箞鑽掕癁錛屽鏋滄兂瑕佷竴涓猄QL 璇彞瀹炵幇榪欎釜鍔熻兘鐨勮瘽錛屾垜浠渶瑕佺敤鍒癈ase鍑芥暟銆備唬鐮佸涓?
UPDATE Personnel
SET salary = CASE WHEN salary >= 5000
銆 THEN salary * 0.9
WHEN salary >= 2000 AND salary < 4600
THEN salary * 1.15
ELSE salary END;
榪欓噷瑕佹敞鎰忎竴鐐癸紝鏈鍚庝竴琛岀殑ELSE salary鏄繀闇鐨勶紝瑕佹槸娌℃湁榪欒錛屼笉絎﹀悎榪欎袱涓潯浠剁殑浜虹殑宸ヨ祫灝嗕細琚啓鎴怤Ull,閭e彲灝卞ぇ浜嬩笉濡欎簡銆傚湪Case鍑芥暟涓璄lse閮ㄥ垎鐨勯粯璁ゅ兼槸NULL錛岃繖鐐規槸闇瑕佹敞鎰忕殑鍦版柟銆?
榪欑鏂規硶榪樺彲浠ュ湪寰堝鍦版柟浣跨敤錛屾瘮濡傝鍙樻洿涓婚敭榪欑绱椿銆?
涓鑸儏鍐典笅錛岃鎯蟲妸涓ゆ潯鏁版嵁鐨凱rimary key,a鍜宐浜ゆ崲錛岄渶瑕佺粡榪囦復鏃跺瓨鍌紝鎷瘋礉錛岃鍥炴暟鎹殑涓変釜榪囩▼錛岃鏄嬌鐢–ase鍑芥暟鐨勮瘽錛屼竴鍒囬兘鍙樺緱綆鍗曞浜嗐?
p_key
col_1
col_2
a
1
寮犱笁
b
2
鏉庡洓
c
3
鐜嬩簲
鍋囪鏈夊涓婃暟鎹紝闇瑕佹妸涓婚敭a
鍜?code>b鐩鎬簰浜ゆ崲銆傜敤Case鍑芥暟鏉ュ疄鐜扮殑璇濓紝浠g爜濡備笅
UPDATE SomeTable
SET p_key = CASE WHEN p_key = 'a'
THEN 'b'
WHEN p_key = 'b'
THEN 'a'
ELSE p_key END
WHERE p_key IN ('a', 'b');
鍚屾牱鐨勪篃鍙互浜ゆ崲涓や釜Unique key銆傞渶瑕佹敞鎰忕殑鏄紝濡傛灉鏈夐渶瑕佷氦鎹富閿殑鎯呭喌鍙戠敓錛屽鍗婃槸褰撳垵瀵硅繖涓〃鐨勮璁¤繘琛屽緱涓嶅鍒頒綅錛屽緩璁鏌ヨ〃鐨勮璁℃槸鍚﹀Ε褰撱?
浜旓紝涓や釜琛ㄦ暟鎹槸鍚︿竴鑷寸殑媯鏌ャ?/strong>
Case鍑芥暟涓嶅悓浜嶥ECODE鍑芥暟銆傚湪Case鍑芥暟涓紝鍙互浣跨敤BETWEEN,LIKE,IS NULL,IN,EXISTS絳夌瓑銆傛瘮濡傝浣跨敤IN,EXISTS錛屽彲浠ヨ繘琛屽瓙鏌ヨ錛屼粠鑰?瀹炵幇鏇村鐨勫姛鑳姐?
涓嬮潰鍏蜂釜渚嬪瓙鏉ヨ鏄庯紝鏈変袱涓〃錛宼bl_A,tbl_B錛屼袱涓〃涓兘鏈塳eyCol鍒椼傜幇鍦ㄦ垜浠涓や釜琛ㄨ繘琛屾瘮杈冿紝tbl_A涓殑keyCol鍒楃殑鏁版嵁濡傛灉鍦╰bl_B鐨刱eyCol鍒楃殑鏁版嵁涓彲浠ユ壘鍒幫紝 榪斿洖緇撴灉'Matched',濡傛灉娌℃湁鎵懼埌錛岃繑鍥炵粨鏋?Unmatched'銆?
瑕佸疄鐜頒笅闈㈣繖涓姛鑳斤紝鍙互浣跨敤涓嬮潰涓ゆ潯璇彞
--浣跨敤IN鐨勬椂鍊?/span>
SELECT keyCol,
CASE WHEN keyCol IN ( SELECT keyCol FROM tbl_B )
THEN 'Matched'
ELSE 'Unmatched' END Label
FROM tbl_A;
--浣跨敤EXISTS鐨勬椂鍊?/span>
SELECT keyCol,
CASE WHEN EXISTS ( SELECT * FROM tbl_B
WHERE tbl_A.keyCol = tbl_B.keyCol )
THEN 'Matched'
ELSE 'Unmatched' END Label
FROM tbl_A;
浣跨敤IN鍜孍XISTS鐨勭粨鏋滄槸鐩稿悓鐨勩備篃鍙互浣跨敤NOT IN鍜孨OT EXISTS錛屼絾鏄繖涓椂鍊欒娉ㄦ剰NULL鐨勬儏鍐點?
鍏紝鍦–ase鍑芥暟涓嬌鐢ㄥ悎璁″嚱鏁?/strong>
鍋囪鏈変笅闈竴涓〃
瀛﹀彿(std_id)
璇劇▼ID(class_id)
璇劇▼鍚?class_name)
涓諱慨flag錛坢ain_class_flg)
100
1
緇忔祹瀛?/td>
Y
100
2
鍘嗗彶瀛?/td>
N
200
2
鍘嗗彶瀛?/td>
N
200
3
鑰冨彜瀛?/td>
Y
200
4
璁$畻鏈?/td>
N
300
4
璁$畻鏈?/td>
N
400
5
鍖栧
N
500
6
鏁板
N
鏈夌殑瀛︾敓閫夋嫨浜嗗悓鏃朵慨鍑犻棬璇劇▼(100,200)涔熸湁鐨勫鐢熷彧閫夋嫨浜嗕竴闂ㄨ紼?300,400,500)銆傞変慨澶氶棬璇劇▼鐨勫鐢燂紝瑕侀夋嫨涓闂ㄨ紼嬩綔涓轟富淇紝涓諱慨flag閲岄潰鍐欏叆 Y銆傚彧閫夋嫨涓闂ㄨ紼嬬殑瀛︾敓錛屼富淇甪lag涓篘(瀹為檯涓婅鏄啓鍏鐨勮瘽錛屽氨娌℃湁涓嬮潰鐨勯夯鐑︿簨浜嗭紝涓轟簡涓句緥瀛愶紝榪樿澶氬鍖呭惈)銆?
鐜板湪鎴戜滑瑕佹寜鐓т笅闈袱涓潯浠跺榪欎釜琛ㄨ繘琛屾煡璇?
綆鍗曠殑鎯蟲硶灝辨槸錛屾墽琛屼袱鏉′笉鍚岀殑SQL璇彞榪涜鏌ヨ銆?
鏉′歡1
--鏉′歡1錛氬彧閫夋嫨浜嗕竴闂ㄨ紼嬬殑瀛︾敓
SELECT std_id, MAX(class_id) AS main_class
FROM Studentclass
GROUP BY std_id
HAVING COUNT(*) = 1;
鎵ц緇撴灉1
STD_ID MAIN_class
------ ----------
300 4
400 5
500 6
鏉′歡2
--鏉′歡2錛氶夋嫨澶氶棬璇劇▼鐨勫鐢?/span>
SELECT std_id, class_id AS main_class
FROM Studentclass
WHERE main_class_flg = 'Y' ;
鎵ц緇撴灉2
STD_ID MAIN_class
------ ----------
100 1
200 3
濡傛灉浣跨敤Case鍑芥暟錛屾垜浠彧瑕佷竴鏉QL璇彞灝卞彲浠ヨВ鍐抽棶棰橈紝鍏蜂綋濡備笅鎵紺?
SELECT std_id,
CASE WHEN COUNT(*) = 1 --鍙夋嫨涓闂ㄨ紼嬬殑瀛︾敓鐨勬儏鍐?/span>
THEN MAX(class_id)
ELSE MAX(CASE WHEN main_class_flg = 'Y'
THEN class_id
ELSE NULL END
)
END AS main_class
FROM Studentclass
GROUP BY std_id;
榪愯緇撴灉
STD_ID MAIN_class
------ ----------
100 1
200 3
300 4
400 5
500 6
閫氳繃鍦–ase鍑芥暟涓祵濂桟ase鍑芥暟錛屽湪鍚堣鍑芥暟涓嬌鐢–ase鍑芥暟絳夋柟娉曪紝鎴戜滑鍙互杞繪澗鐨勮В鍐寵繖涓棶棰樸備嬌鐢–ase鍑芥暟緇欐垜浠甫鏉ヤ簡鏇村ぇ鐨勮嚜鐢卞害銆?
鏈鍚庢彁閱掍竴涓嬩嬌鐢–ase鍑芥暟鐨勬柊鎵嬫敞鎰忎笉瑕佺姱涓嬮潰鐨勯敊璇?
CASE col_1
WHEN 1 銆 THEN 'Right'
WHEN NULL THEN 'Wrong'
END
鍦ㄨ繖涓鍙ヤ腑When Null榪欎竴琛屾繪槸榪斿洖unknown錛屾墍浠ユ案榪滀笉浼氬嚭鐜癢rong鐨勬儏鍐點傚洜涓鴻繖鍙ュ彲浠ユ浛鎹㈡垚WHEN col_1 = NULL錛岃繖鏄竴涓敊璇殑鐢ㄦ硶錛岃繖涓椂鍊欐垜浠簲璇ラ夋嫨鐢╓HEN col_1 IS NULL銆?img src ="http://www.tkk7.com/rain1102/aggbug/230840.html" width = "1" height = "1" />
]]>--綆鍗旵ase鍑芥暟
CASE sex
WHEN '1' THEN '鐢?
WHEN '2' THEN '濂?
ELSE '鍏朵粬' END
--Case鎼滅儲鍑芥暟
CASE WHEN sex = '1' THEN '鐢?
WHEN sex = '2' THEN '濂?
ELSE '鍏朵粬' END
榪欎袱縐嶆柟寮忥紝鍙互瀹炵幇鐩稿悓鐨勫姛鑳姐傜畝鍗旵ase鍑芥暟鐨勫啓娉曠浉瀵規瘮杈冪畝媧侊紝浣嗘槸鍜孋ase鎼滅儲鍑芥暟鐩告瘮錛屽姛鑳芥柟闈細鏈変簺闄愬埗錛屾瘮濡傚啓鍒ゆ柇寮忋?
榪樻湁涓涓渶瑕佹敞鎰忕殑闂錛孋ase鍑芥暟鍙繑鍥炵涓涓鍚堟潯浠剁殑鍊鹼紝鍓╀笅鐨凜ase閮ㄥ垎灝嗕細琚嚜鍔ㄥ拷鐣ャ?
--姣斿璇達紝涓嬮潰榪欐SQL錛屼綘姘歌繙鏃犳硶寰楀埌“絎簩綾?#8221;榪欎釜緇撴灉
CASE WHEN col_1 IN ( 'a', 'b') THEN '絎竴綾?
WHEN col_1 IN ('a') THEN '絎簩綾?
ELSE'鍏朵粬' END
涓嬮潰鎴戜滑鏉ョ湅涓涓嬶紝浣跨敤Case鍑芥暟閮借兘鍋氫簺浠涔堜簨鎯呫?
涓錛屽凡鐭ユ暟鎹寜鐓у彟澶栦竴縐嶆柟寮忚繘琛屽垎緇勶紝鍒嗘瀽銆?/strong>
鏈夊涓嬫暟鎹?(涓轟簡鐪嬪緱鏇存竻妤氾紝鎴戝茍娌℃湁浣跨敤鍥藉浠g爜錛岃屾槸鐩存帴鐢ㄥ浗瀹跺悕浣滀負Primary Key)
鍥藉錛坈ountry錛?/td>
浜哄彛錛坧opulation錛?/td>
涓浗
600
緹庡浗
100
鍔犳嬁澶?/td>
100
鑻卞浗
200
娉曞浗
300
鏃ユ湰
250
寰峰浗
200
澧ㄨタ鍝?/td>
50
鍗板害
250
鏍規嵁榪欎釜鍥藉浜哄彛鏁版嵁錛岀粺璁′簹媧插拰鍖楃編媧茬殑浜哄彛鏁伴噺銆傚簲璇ュ緱鍒頒笅闈㈣繖涓粨鏋溿?
媧?/td>
浜哄彛
浜氭床
1100
鍖楃編媧?/td>
250
鍏朵粬
700
鎯寵瑙e喅榪欎釜闂錛屼綘浼氭庝箞鍋氾紵鐢熸垚涓涓甫鏈夋床Code鐨刅iew錛屾槸涓涓В鍐蟲柟娉曪紝浣嗘槸榪欐牱寰堥毦鍔ㄦ佺殑鏀瑰彉緇熻鐨勬柟寮忋?
濡傛灉浣跨敤Case鍑芥暟錛孲QL浠g爜濡備笅:
SELECT SUM(population),
CASE country
WHEN '涓浗' THEN '浜氭床'
WHEN '鍗板害' THEN '浜氭床'
WHEN '鏃ユ湰' THEN '浜氭床'
WHEN '緹庡浗' THEN '鍖楃編媧?
WHEN '鍔犳嬁澶? THEN '鍖楃編媧?
WHEN '澧ㄨタ鍝? THEN '鍖楃編媧?
ELSE '鍏朵粬' END
FROM Table_A
GROUP BY CASE country
WHEN '涓浗' THEN '浜氭床'
WHEN '鍗板害' THEN '浜氭床'
WHEN '鏃ユ湰' THEN '浜氭床'
WHEN '緹庡浗' THEN '鍖楃編媧?
WHEN '鍔犳嬁澶? THEN '鍖楃編媧?
WHEN '澧ㄨタ鍝? THEN '鍖楃編媧?
ELSE '鍏朵粬' END;
鍚屾牱鐨勶紝鎴戜滑涔熷彲浠ョ敤榪欎釜鏂規硶鏉ュ垽鏂伐璧勭殑絳夌駭錛屽茍緇熻姣忎竴絳夌駭鐨勪漢鏁般係QL浠g爜濡備笅錛?
SELECT
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END salary_class,
COUNT(*)
FROM Table_A
GROUP BY
CASE WHEN salary <= 500 THEN '1'
WHEN salary > 500 AND salary <= 600 THEN '2'
WHEN salary > 600 AND salary <= 800 THEN '3'
WHEN salary > 800 AND salary <= 1000 THEN '4'
ELSE NULL END;
浜岋紝鐢ㄤ竴涓猄QL璇彞瀹屾垚涓嶅悓鏉′歡鐨勫垎緇勩?/strong>
鏈夊涓嬫暟鎹?
鍥藉錛坈ountry錛?/td>
鎬у埆錛坰ex錛?/td>
浜哄彛錛坧opulation錛?/td>
涓浗
1
340
涓浗
2
260
緹庡浗
1
45
緹庡浗
2
55
鍔犳嬁澶?/td>
1
51
鍔犳嬁澶?/td>
2
49
鑻卞浗
1
40
鑻卞浗
2
60
鎸夌収鍥藉鍜屾у埆榪涜鍒嗙粍錛屽緱鍑虹粨鏋滃涓?
鍥藉
鐢?/td>
濂?/td>
涓浗
340
260
緹庡浗
45
55
鍔犳嬁澶?/td>
51
49
鑻卞浗
40
60
鏅氭儏鍐典笅錛岀敤UNION涔熷彲浠ュ疄鐜扮敤涓鏉¤鍙ヨ繘琛屾煡璇€備絾鏄偅鏍峰鍔犳秷鑰?涓や釜Select閮ㄥ垎)錛岃屼笖SQL璇彞浼氭瘮杈冮暱銆?
涓嬮潰鏄竴涓槸鐢–ase鍑芥暟鏉ュ畬鎴愯繖涓姛鑳界殑渚嬪瓙
SELECT country,
SUM( CASE WHEN sex = '1' THEN
population ELSE 0 END), --鐢鋒т漢鍙?/span>
SUM( CASE WHEN sex = '2' THEN
population ELSE 0 END) --濂蟲т漢鍙?/span>
FROM Table_A
GROUP BY country;
榪欐牱鎴戜滑浣跨敤Select錛屽畬鎴愬浜岀淮琛ㄧ殑杈撳嚭褰㈠紡錛屽厖鍒嗘樉紺轟簡Case鍑芥暟鐨勫己澶с?
涓夛紝鍦–heck涓嬌鐢–ase鍑芥暟銆?/strong>
鍦–heck涓嬌鐢–ase鍑芥暟鍦ㄥ緢澶氭儏鍐典笅閮芥槸闈炲父涓嶉敊鐨勮В鍐蟲柟娉曘傚彲鑳芥湁寰堝浜烘牴鏈氨涓嶇敤Check錛岄偅涔堟垜寤鴻浣犲湪鐪嬭繃涓嬮潰鐨勪緥瀛愪箣鍚庝篃灝濊瘯涓涓嬪湪SQL涓嬌鐢–heck銆?
涓嬮潰鎴戜滑鏉ヤ婦涓緥瀛?
鍏徃A錛岃繖涓叕鍙告湁涓瀹氾紝濂寵亴鍛樼殑宸ヨ祫蹇呴』楂樹簬1000鍧椼傚鏋滅敤Check鍜孋ase鏉ヨ〃鐜扮殑璇濓紝濡備笅鎵紺?
CONSTRAINT check_salary CHECK
( CASE WHEN sex = '2'
THEN CASE WHEN salary > 1000
THEN 1 ELSE 0 END
ELSE 1 END = 1 )
濡傛灉鍗曠函浣跨敤Check錛屽涓嬫墍紺?
CONSTRAINT check_salary CHECK
( sex = '2' AND salary > 1000 )
濂寵亴鍛樼殑鏉′歡鍊掓槸絎﹀悎浜嗭紝鐢瘋亴鍛樺氨鏃犳硶杈撳叆浜嗐?
USE pubs
GO
SELECT
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END AS Range,
Title
FROM titles
GROUP BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
ORDER BY
CASE
WHEN price IS NULL THEN 'Unpriced'
WHEN price < 10 THEN 'Bargain'
WHEN price BETWEEN 10 and 20 THEN 'Average'
ELSE 'Gift to impress relatives'
END,
Title
GO
]]>
浠庤〃涓垹闄ら噸澶嶈褰?
瑙e喅鏂規
鐢ㄥ甫鏈夎仛闆嗗嚱鏁扮殑瀛愭煡璇? 渚嬪MIN, 浠繪剰閫夋嫨淇濈暀鐨処D(鏈緥涓彧淇濈暀姣忕粍涓璉D鍙鋒渶灝忕殑璁板綍):
delete from dept
where id not in (select min(id)
from dept
group by name)
SQL-92 璇硶
DECLARE cursor_name [ INSENSITIVE ] [ SCROLL ] CURSOR
FOR select_statement
[ FOR { READ ONLY | UPDATE [ OF column_name [ ,...n ] ] } ]
Transact-SQL 鎵╁睍璇硶
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 ] ] ]
SQL-92 鍙傛暟
cursor_name
鏄墍瀹氫箟鐨?Transact-SQL 鏈嶅姟鍣ㄦ父鏍囧悕縐般俢ursor_name 蹇呴』閬典粠鏍囪瘑絎﹁鍒欍傛湁鍏蟲爣璇嗙瑙勫垯鐨勬洿澶氫俊鎭紝璇峰弬瑙佷嬌鐢ㄦ爣璇嗙銆?/font>
INSENSITIVE
瀹氫箟涓涓父鏍囷紝浠ュ垱寤哄皢鐢辮娓告爣浣跨敤鐨勬暟鎹殑涓存椂澶嶆湰銆傚娓告爣鐨勬墍鏈夎姹傞兘浠?tempdb 涓殑璇ヤ復鏃惰〃涓緱鍒板簲絳旓紱鍥犳錛屽湪瀵硅娓告爣榪涜鎻愬彇鎿嶄綔鏃惰繑鍥炵殑鏁版嵁涓笉鍙嶆槧瀵瑰熀琛ㄦ墍鍋氱殑淇敼錛屽茍涓旇娓告爣涓嶅厑璁鎬慨鏀廣備嬌鐢?SQL-92 璇硶鏃訛紝濡傛灉鐪佺暐 INSENSITIVE錛岋紙浠諱綍鐢ㄦ埛錛夊鍩鴻〃鎻愪氦鐨勫垹闄ゅ拰鏇存柊閮藉弽鏄犲湪鍚庨潰鐨勬彁鍙栦腑銆?/font>
SCROLL
鎸囧畾鎵鏈夌殑鎻愬彇閫夐」錛團IRST銆丩AST銆丳RIOR銆丯EXT銆丷ELATIVE銆丄BSOLUTE錛夊潎鍙敤銆傚鏋滃湪 SQL-92 DECLARE CURSOR 涓湭鎸囧畾 SCROLL錛屽垯 NEXT 鏄敮涓鏀寔鐨勬彁鍙栭夐」銆傚鏋滄寚瀹?SCROLL錛屽垯涓嶈兘涔熸寚瀹?FAST_FORWARD銆?/font>
select_statement
鏄畾涔夋父鏍囩粨鏋滈泦鐨勬爣鍑?SELECT 璇彞銆傚湪娓告爣澹版槑鐨?select_statement 鍐呬笉鍏佽浣跨敤鍏抽敭瀛?COMPUTE銆丆OMPUTE BY銆丗OR BROWSE 鍜?INTO銆?/font>
濡傛灉 select_statement 涓殑瀛愬彞涓庢墍璇鋒眰鐨勬父鏍囩被鍨嬬殑鍔熻兘鍙戠敓鍐茬獊錛屽垯 Microsoft? SQL Server? 闅愭у湴灝嗘父鏍囪漿鎹負鍙︿竴縐嶇被鍨嬨傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙侀殣鎬ф父鏍囪漿鎹€?/font>
READ ONLY
Prevents updates made through this cursor.鍦?UPDATE 鎴?DELETE 璇彞鐨?WHERE CURRENT OF 瀛愬彞涓笉鑳藉紩鐢ㄦ父鏍囥傝閫夐」鏇夸唬瑕佹洿鏂扮殑娓告爣鐨勯粯璁ゅ姛鑳姐?/font>
UPDATE [OF column_name [,...n]]
瀹氫箟娓告爣鍐呭彲鏇存柊鐨勫垪銆傚鏋滄寚瀹?OF column_name [,...n] 鍙傛暟錛屽垯鍙厑璁鎬慨鏀規墍鍒楀嚭鐨勫垪銆傚鏋滃湪 UPDATE 涓湭鎸囧畾鍒楃殑鍒楄〃錛屽垯鍙互鏇存柊鎵鏈夊垪銆?/font>
Transact-SQL 鎵╁睍鍙傛暟
cursor_name
鏄墍瀹氫箟鐨?Transact-SQL 鏈嶅姟鍣ㄦ父鏍囧悕縐般俢ursor_name 蹇呴』閬典粠鏍囪瘑絎﹁鍒欍傛湁鍏蟲爣璇嗙瑙勫垯鐨勬洿澶氫俊鎭紝璇峰弬瑙佷嬌鐢ㄦ爣璇嗙銆?/font>
LOCAL
鎸囧畾璇ユ父鏍囩殑浣滅敤鍩熷鍦ㄥ叾涓垱寤哄畠鐨勬壒澶勭悊銆佸瓨鍌ㄨ繃紼嬫垨瑙﹀彂鍣ㄦ槸灞閮ㄧ殑銆傝娓告爣鍚嶇О浠呭湪榪欎釜浣滅敤鍩熷唴鏈夋晥銆傚湪鎵瑰鐞嗐佸瓨鍌ㄨ繃紼嬨佽Е鍙戝櫒鎴栧瓨鍌ㄨ繃紼?OUTPUT 鍙傛暟涓紝璇ユ父鏍囧彲鐢卞眬閮ㄦ父鏍囧彉閲忓紩鐢ㄣ侽UTPUT 鍙傛暟鐢ㄤ簬灝嗗眬閮ㄦ父鏍囦紶閫掑洖璋冪敤鎵瑰鐞嗐佸瓨鍌ㄨ繃紼嬫垨瑙﹀彂鍣紝瀹冧滑鍙湪瀛樺偍榪囩▼緇堟鍚庣粰娓告爣鍙橀噺鎸囨淳鍙傛暟浣垮叾寮曠敤娓告爣銆傞櫎闈?OUTPUT 鍙傛暟灝嗘父鏍囦紶閫掑洖鏉ワ紝鍚﹀垯娓告爣灝嗗湪鎵瑰鐞嗐佸瓨鍌ㄨ繃紼嬫垨瑙﹀彂鍣ㄧ粓姝㈡椂闅愭ч噴鏀俱傚鏋?OUTPUT 鍙傛暟灝嗘父鏍囦紶閫掑洖鏉ワ紝娓告爣鍦ㄦ渶鍚庡紩鐢ㄥ畠鐨勫彉閲忛噴鏀炬垨紱誨紑浣滅敤鍩熸椂閲婃斁銆?/font>
GLOBAL
鎸囧畾璇ユ父鏍囩殑浣滅敤鍩熷榪炴帴鏄叏灞鐨勩傚湪鐢辮繛鎺ユ墽琛岀殑浠諱綍瀛樺偍榪囩▼鎴栨壒澶勭悊涓紝閮藉彲浠ュ紩鐢ㄨ娓告爣鍚嶇О銆傝娓告爣浠呭湪鑴辨帴鏃墮殣鎬ч噴鏀俱?/font>
璇存槑 濡傛灉 GLOBAL 鍜?LOCAL 鍙傛暟閮芥湭鎸囧畾錛屽垯榛樿鍊肩敱 default to local cursor 鏁版嵁搴撻夐」鐨勮緗帶鍒躲傚湪 SQL Server 7.0 鐗堜腑錛岃閫夐」榛樿涓?FALSE 浠ヤ笌 SQL Server 鏃╂湡鐗堟湰鐩稿尮閰嶏紝鍦?SQL Server 鏃╂湡鐗堟湰涓墍鏈夋父鏍囬兘鏄叏灞鐨勩傝閫夐」鐨勯粯璁ゅ煎湪浠ュ悗鐨?SQL Server 鐗堟湰涓彲鑳戒細鏇存敼銆傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙佽緗暟鎹簱閫夐」銆?/font>
FORWARD_ONLY
鎸囧畾娓告爣鍙兘浠庣涓琛屾粴鍔ㄥ埌鏈鍚庝竴琛屻侳ETCH NEXT 鏄敮涓鍙楁敮鎸佺殑鎻愬彇閫夐」銆傚鏋滃湪鎸囧畾 FORWARD_ONLY 鏃朵笉鎸囧畾 STATIC銆並EYSET 鍜?DYNAMIC 鍏抽敭瀛楋紝鍒欐父鏍囦綔涓?DYNAMIC 娓告爣榪涜鎿嶄綔銆傚鏋?FORWARD_ONLY 鍜?SCROLL 鍧囨湭鎸囧畾錛岄櫎闈炴寚瀹?STATIC銆並EYSET 鎴?DYNAMIC 鍏抽敭瀛楋紝鍚﹀垯榛樿涓?FORWARD_ONLY銆係TATIC銆並EYSET 鍜?DYNAMIC 娓告爣榛樿涓?SCROLL銆備笌 ODBC 鍜?ADO榪欑被鏁版嵁搴?API 涓嶅悓錛孲TATIC銆並EYSET 鍜?DYNAMIC Transact-SQL 娓告爣鏀寔 FORWARD_ONLY銆侳AST_FORWARD 鍜?FORWARD_ONLY 鏄簰鏂ョ殑錛涘鏋滄寚瀹氫竴涓紝鍒欎笉鑳芥寚瀹氬彟涓涓?/p>
STATIC
瀹氫箟涓涓父鏍囷紝浠ュ垱寤哄皢鐢辮娓告爣浣跨敤鐨勬暟鎹殑涓存椂澶嶆湰銆傚娓告爣鐨勬墍鏈夎姹傞兘浠?tempdb 涓殑璇ヤ復鏃惰〃涓緱鍒板簲絳旓紱鍥犳錛屽湪瀵硅娓告爣榪涜鎻愬彇鎿嶄綔鏃惰繑鍥炵殑鏁版嵁涓笉鍙嶆槧瀵瑰熀琛ㄦ墍鍋氱殑淇敼錛屽茍涓旇娓告爣涓嶅厑璁鎬慨鏀廣?/p>
KEYSET
鎸囧畾褰撴父鏍囨墦寮鏃訛紝娓告爣涓鐨勬垚鍛樿祫鏍煎拰欏哄簭宸茬粡鍥哄畾銆傚琛岃繘琛屽敮涓鏍囪瘑鐨勯敭闆嗗唴緗湪 tempdb 鍐呬竴涓О涓?keyset 鐨勮〃涓傚鍩鴻〃涓殑闈為敭鍊兼墍鍋氱殑鏇存敼錛堢敱娓告爣鎵鏈夎呮洿鏀規垨鐢卞叾瀹冪敤鎴鋒彁浜わ級鍦ㄧ敤鎴鋒粴鍔ㄦ父鏍囨椂鏄彲瑙嗙殑銆傚叾浠栫敤鎴瘋繘琛岀殑鎻掑叆鏄笉鍙鐨勶紙涓嶈兘閫氳繃 Transact-SQL 鏈嶅姟鍣ㄦ父鏍囪繘琛屾彃鍏ワ級銆傚鏋滄煇琛屽凡鍒犻櫎錛屽垯瀵硅琛岀殑鎻愬彇鎿嶄綔灝嗚繑鍥?@@FETCH_STATUS 鍊?-2銆備粠娓告爣澶栨洿鏂伴敭鍊肩被浼間簬鍒犻櫎鏃ц鍚庢帴鐫鎻掑叆鏂拌鐨勬搷浣溿傚惈鏈夋柊鍊肩殑琛屼笉鍙錛屽鍚湁鏃у肩殑琛岀殑鎻愬彇鎿嶄綔灝嗚繑鍥?@@FETCH_STATUS 鍊?-2銆傚鏋滈氳繃鎸囧畾 WHERE CURRENT OF 瀛愬彞鐢ㄦ父鏍囧畬鎴愭洿鏂幫紝鍒欐柊鍊煎彲瑙嗐?/p>
DYNAMIC
瀹氫箟涓涓父鏍囷紝浠ュ弽鏄犲湪婊氬姩娓告爣鏃跺緇撴灉闆嗗唴鐨勮鎵鍋氱殑鎵鏈夋暟鎹洿鏀廣傝鐨勬暟鎹箋侀『搴忓拰鎴愬憳鍦ㄦ瘡嬈℃彁鍙栨椂閮戒細鏇存敼銆傚姩鎬佹父鏍囦笉鏀寔 ABSOLUTE 鎻愬彇閫夐」銆?/p>
FAST_FORWARD
鎸囧畾鍚敤浜嗘ц兘浼樺寲鐨?FORWARD_ONLY銆丷EAD_ONLY 娓告爣銆傚鏋滄寚瀹?FAST_FORWARD錛屽垯涓嶈兘涔熸寚瀹?SCROLL 鎴?FOR_UPDATE銆侳AST_FORWARD 鍜?FORWARD_ONLY 鏄簰鏂ョ殑錛涘鏋滄寚瀹氫竴涓紝鍒欎笉鑳芥寚瀹氬彟涓涓?/p>
READ_ONLY
紱佹閫氳繃璇ユ父鏍囪繘琛屾洿鏂般傚湪 UPDATE 鎴?DELETE 璇彞鐨?WHERE CURRENT OF 瀛愬彞涓笉鑳藉紩鐢ㄦ父鏍囥傝閫夐」鏇夸唬瑕佹洿鏂扮殑娓告爣鐨勯粯璁ゅ姛鑳姐?/p>
SCROLL_LOCKS
鎸囧畾紜繚閫氳繃娓告爣瀹屾垚鐨勫畾浣嶆洿鏂版垨瀹氫綅鍒犻櫎鍙互鎴愬姛銆傚綋灝嗚璇誨叆娓告爣浠ョ‘淇濆畠浠彲鐢ㄤ簬浠ュ悗鐨勪慨鏀規椂錛孧icrosoft? SQL Server? 浼氶攣瀹氳繖浜涜銆傚鏋滆繕鎸囧畾浜?FAST_FORWARD錛屽垯涓嶈兘鎸囧畾 SCROLL_LOCKS銆?/p>
OPTIMISTIC
鎸囧畾濡傛灉琛岃嚜浠庤璇誨叆娓告爣浠ユ潵宸插緱鍒版洿鏂幫紝鍒欓氳繃娓告爣榪涜鐨勫畾浣嶆洿鏂版垨瀹氫綅鍒犻櫎涓嶆垚鍔熴傚綋灝嗚璇誨叆娓告爣鏃?SQL Server 涓嶉攣瀹氳銆傜浉鍙嶏紝SQL Server 浣跨敤 timestamp 鍒楀肩殑姣旇緝錛屾垨鑰呭鏋滆〃娌℃湁 timestamp 鍒楀垯浣跨敤鏍¢獙鍊鹼紝浠ョ‘瀹氬皢琛岃鍏ユ父鏍囧悗鏄惁宸蹭慨鏀硅琛屻傚鏋滃凡淇敼璇ヨ錛屽皾璇曡繘琛岀殑瀹氫綅鏇存柊鎴栧畾浣嶅垹闄ゅ皢澶辮觸銆傚鏋滆繕鎸囧畾浜?FAST_FORWARD錛屽垯涓嶈兘鎸囧畾 OPTIMISTIC銆?/p>
TYPE_WARNING
鎸囧畾濡傛灉娓告爣浠庢墍璇鋒眰鐨勭被鍨嬮殣鎬ц漿鎹負鍙︿竴縐嶇被鍨嬶紝鍒欑粰瀹㈡埛绔彂閫佽鍛婃秷鎭?/p>
select_statement
鏄畾涔夋父鏍囩粨鏋滈泦鐨勬爣鍑?SELECT 璇彞銆傚湪娓告爣澹版槑鐨?select_statement 鍐呬笉鍏佽浣跨敤鍏抽敭瀛?COMPUTE銆丆OMPUTE BY銆丗OR BROWSE 鍜?INTO銆?/p>
濡傛灉 select_statement 鍐呯殑瀛愬彞涓庢墍璇鋒眰鐨勬父鏍囩被鍨嬪啿紿侊紝SQL Server 灝嗘父鏍囬殣鎬ц漿鎹㈡垚鍙︿竴縐嶇被鍨嬨傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙侀殣鎬ф父鏍囪漿鎹€?/p>
UPDATE [OF column_name [,...n]]
瀹氫箟娓告爣鍐呭彲鏇存柊鐨勫垪銆傚鏋滄彁渚涗簡 OF column_name [,...n]錛屽垯鍙厑璁鎬慨鏀瑰垪鍑虹殑鍒椼傚鏋滃湪 UPDATE 涓湭鎸囧畾鍒楃殑鍒楄〃錛岄櫎闈炴寚瀹氫簡 READ_ONLY 騫跺彂閫夐」錛屽惁鍒欐墍鏈夊垪鍧囧彲鏇存柊銆?/p>
娉ㄩ噴
DECLARE CURSOR 瀹氫箟 Transact-SQL 鏈嶅姟鍣ㄦ父鏍囩殑鐗規э紝渚嬪娓告爣鐨勬粴鍔ㄨ涓哄拰鐢ㄤ簬鐢熸垚娓告爣瀵瑰叾榪涜鎿嶄綔鐨勭粨鏋滈泦鐨勬煡璇€侽PEN 璇彞濉厖緇撴灉闆嗭紝FETCH 浠庣粨鏋滈泦榪斿洖琛屻侰LOSE 璇彞閲婃斁涓庢父鏍囧叧鑱旂殑褰撳墠緇撴灉闆嗐侱EALLOCATE 璇彞閲婃斁娓告爣鎵浣跨敤鐨勮祫婧愩?/p>
DECLARE CURSOR 璇彞鐨勭涓縐嶆牸寮忎嬌鐢?SQL-92 璇硶澹版槑娓告爣琛屼負銆侱ECLARE CURSOR 鐨勭浜岀鏍煎紡浣跨敤 Transact-SQL 鎵╁睍錛屼嬌鎮ㄥ緱浠ヤ嬌鐢ㄥ湪 ODBC銆丄DO 鍜?DB-Library鐨勬暟鎹簱 API 娓告爣鍑芥暟涓殑鐩稿悓娓告爣綾誨瀷瀹氫箟娓告爣銆?/p>
涓嶈兘娣鋒穯榪欎袱縐嶆牸寮忋傚鏋滃湪 CURSOR 鍏抽敭瀛楃殑鍓嶉潰鎸囧畾 SCROLL 鎴?INSENSITIVE 鍏抽敭瀛楋紝鍒欎笉鑳藉湪 CURSOR 鍜?FOR select_statement 鍏抽敭瀛椾箣闂翠嬌鐢ㄤ換浣曞叧閿瓧銆傚鏋滃湪 CURSOR 鍜?FOR select_statement 鍏抽敭瀛椾箣闂存寚瀹氫換浣曞叧閿瓧錛屽垯涓嶈兘鍦?CURSOR 鍏抽敭瀛楃殑鍓嶉潰鎸囧畾 SCROLL 鎴?INSENSITIVE銆?/p>
濡傛灉浣跨敤 Transact-SQL 璇硶鐨?DECLARE CURSOR 涓嶆寚瀹?READ_ONLY銆丱PTIMISTIC 鎴?SCROLL_LOCKS錛屽垯榛樿璁劇疆濡備笅錛?
濡傛灉 SELECT 璇彞涓嶆敮鎸佹洿鏂幫紙鏉冮檺涓嶅錛岃闂殑榪滅▼琛ㄤ笉鏀寔鏇存柊錛岀瓑絳夛級錛屽垯娓告爣鏄?READ_ONLY銆?/p>
STATIC 鍜孎AST_FORWARD 娓告爣榛樿涓?READ_ONLY銆?/p>
DYNAMIC 鍜?KEYSET 娓告爣榛樿涓?OPTIMISTIC銆?
娓告爣鍚嶇О鍙兘鐢卞叾瀹?Transact-SQL 璇彞寮曠敤錛屼笉鑳界敱鏁版嵁搴?API 鍑芥暟寮曠敤銆備緥濡傦紝鍦ㄥ0鏄庢父鏍囧悗錛屼笉鑳戒粠 OLE DB銆丱DBC銆丄DO 鎴?DB-Library 鍑芥暟鎴栨柟娉曞紩鐢ㄦ父鏍囧悕縐般傛父鏍囪涓嶈兘閫氳繃 API 鎻愬彇鍑芥暟鎴栨柟娉曟彁鍙栵紝鑰屽彧鑳界敱 Transact-SQL FETCH 璇彞鎻愬彇銆?/p>
鍦ㄥ0鏄庢父鏍囧悗錛屽彲浣跨敤涓嬪垪緋葷粺瀛樺偍榪囩▼紜畾娓告爣鐨勭壒鎬с?/p>
緋葷粺瀛樺偍榪囩▼ 鎻忚堪
sp_cursor_list 榪斿洖褰撳墠鍦ㄨ繛鎺ヤ笂鍙鐨勬父鏍囧垪琛ㄥ強鍏剁壒鎬с?
sp_describe_cursor 鎻忚堪娓告爣鐗規э紝姣斿鏄彧榪涙父鏍囪繕鏄粴鍔ㄦ父鏍囥?
sp_describe_cursor_columns 鎻忚堪娓告爣緇撴灉闆嗕腑鐨勫垪鐨勭壒鎬с?
sp_describe_cursor_tables 鎻忚堪娓告爣鎵璁塊棶鐨勫熀琛ㄣ?
鍙橀噺鍙綔涓哄0鏄庢父鏍囩殑 select_statement 鐨勪竴閮ㄥ垎浣跨敤銆傜劧鑰岋紝鍦ㄦ父鏍囧0鏄庝箣鍚庡閭d簺鍙橀噺鐨勬洿鏀瑰皢涓嶄細瀵規父鏍囩殑鎿嶄綔浜х敓褰卞搷銆?/p>
鏉冮檺
榛樿鎯呭喌涓嬶紝灝?DECLARE CURSOR 鏉冮檺鎺堜簣瀵規父鏍囦腑鎵浣跨敤鐨勮鍥俱佽〃鍜屽垪鏈?SELECT 鏉冮檺鐨勪換浣曠敤鎴楓?/p>
紺轟緥
A. 浣跨敤綆鍗曟父鏍囧拰璇硶
鎵撳紑璇ユ父鏍囨椂鎵鐢熸垚鐨勭粨鏋滈泦鍖呮嫭 pubs 鏁版嵁搴撶殑 authors 琛ㄤ腑鐨勬墍鏈夎鍜屽垪銆傚彲浠ユ洿鏂拌娓告爣錛屽璇ユ父鏍囨墍鍋氱殑鎵鏈夋洿鏂板拰鍒犻櫎鍧囧湪鎻愬彇涓〃鐜板嚭鏉ャ傚洜涓烘病鎸囧畾 SCROLL 閫夐」錛孎ETCH NEXT 鏄敮涓鍙敤鐨勬彁鍙栭夐」銆?/p>
DECLARE authors_cursor CURSOR
FOR SELECT * FROM authors
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
B. 浣跨敤宓屽娓告爣鐢熸垚鎶ヨ〃杈撳嚭
涓嬩緥鏄劇ず濡備綍宓屽娓告爣浠ョ敓鎴愬鏉傜殑鎶ヨ〃銆備負姣忎釜浣滆呭0鏄庡唴閮ㄦ父鏍囥?/p>
SET NOCOUNT ON
DECLARE @au_id varchar(11), @au_fname varchar(20), @au_lname varchar(40),
@message varchar(80), @title varchar(80)
PRINT "-------- Utah Authors report --------"
DECLARE authors_cursor CURSOR FOR
SELECT au_id, au_fname, au_lname
FROM authors
WHERE state = "UT"
ORDER BY au_id
OPEN authors_cursor
FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT " "
SELECT @message = "----- Books by Author: " +
@au_fname + " " + @au_lname
PRINT @message
-- Declare an inner cursor based
-- on au_id from the outer cursor.
DECLARE titles_cursor CURSOR FOR
SELECT t.title
FROM titleauthor ta, titles t
WHERE ta.title_id = t.title_id AND
ta.au_id = @au_id -- Variable value from the outer cursor
OPEN titles_cursor
FETCH NEXT FROM titles_cursor INTO @title
IF @@FETCH_STATUS <> 0
PRINT " <<No Books>>"
WHILE @@FETCH_STATUS = 0
BEGIN
SELECT @message = " " + @title
PRINT @message
FETCH NEXT FROM titles_cursor INTO @title
END
CLOSE titles_cursor
DEALLOCATE titles_cursor
-- Get the next author.
FETCH NEXT FROM authors_cursor
INTO @au_id, @au_fname, @au_lname
END
CLOSE authors_cursor
DEALLOCATE authors_cursor
GO
-------- Utah Authors report --------
----- Books by Author: Anne Ringer
The Gourmet Microwave
Is Anger the Enemy?
----- Books by Author: Albert Ringer
Is Anger the Enemy?
Life Without Fear
CREATE DATABASE student
2.濡備綍鍒犻櫎鏁版嵁搴?/p>
DROP DATABASE student
3.濡備綍澶囦喚鏁版嵁搴撳埌紓佺洏鏂囦歡
BACKUP DATABASE student to disk=´c:\1234.bak´
4.濡備綍浠庣鐩樻枃浠惰繕鍘熸暟鎹簱
RESTORE DATABASE studnet FROM DISK = ´c:\1234.bak´
5.鎬庢牱鍒涘緩琛紵
CREATE TABLE Students (
ID int IDENTITY ( 1, 1), --鑷瀛楁,鍩烘暟1,姝ラ暱1
StudentID char (4) NOT NULL ,
Name char (10) NOT NULL ,
Age int NULL ,
Birthday datetime NULL,
CONSTRAINT PK_Students PRIMARY KEY (StudentID) --璁劇疆涓婚敭
)
CREATE TABLE Subjects (
ID int IDENTITY ( 1, 1), --鑷瀛楁,鍩烘暟1,姝ラ暱1
ClassID char (4) NOT NULL ,
ClassName char (10) NOT NULL,
CONSTRAINT PK_Subjects PRIMARY KEY (ClassID) --璁劇疆涓婚敭
)
CREATE TABLE Scores (
ID int IDENTITY ( 1, 1), --鑷瀛楁,鍩烘暟1,姝ラ暱1
StudentID char (4) NOT NULL ,
ClassID char (4) NOT NULL ,
Score float NOT NULL,
CONSTRAINT FK_Scores_Students FOREIGN KEY (StudentID) REFERENCES Students(StudentID), --璁劇疆澶栭敭
CONSTRAINT FK_Scores_Subjects FOREIGN KEY (ClassID) REFERENCES Subjects(ClassID), --璁劇疆澶栭敭
CONSTRAINT PK_Scores PRIMARY KEY (StudentID,ClassID) --璁劇疆涓婚敭
)
6.鎬庢牱鍒犻櫎琛紵
DROP TABLE Students
7.鎬庢牱鍒涘緩瑙嗗浘錛?/p>
CREATE VIEW s_s_s
AS
SELECT Students.Name, Subjects.ClassName, Scores.Score
FROM Scores INNER JOIN
Students ON Scores.StudentID = Students.StudentID INNER JOIN
Subjects ON Scores.ClassID = Subjects.ClassID
8.鎬庢牱鍒犻櫎瑙嗗浘錛?/p>
DROP VIEW s_s_s
9.濡備綍鍒涘緩瀛樺偍榪囩▼?
CREATE PROCEDURE GetStudent
@age INT,
@birthday DATETIME
AS
SELECT *
FROM students
WHERE Age = @age AND Birthday = @birthday
GO
10.濡備綍鍒犻櫎瀛樺偍榪囩▼?
DROP PROCEDURE GetStudent
11.濡備綍鍒涘緩瑙﹀彂鍣?
CREATE TRIGGER reminder
ON Students
FOR INSERT, UPDATE, DELETE
AS
EXEC master..xp_sendmail ´MaryM´,
´Don´´t forget to print a report for the distributors.´
GO
12.濡備綍鍒犻櫎瑙﹀彂鍣?
DROP TRIGGER reminder
13.濡備綍鍒涘緩绱㈠紩?
CREATE UNIQUE INDEX IX_Students ON Students (Name)
14.濡備綍鍒犻櫎绱㈠紩?
DROP INDEX Students.IX_Students
15.鎬庢牱緇欒〃娣誨姞瀛楁錛?/p>
ALTER TABLE Students ADD Address varchar (50) NULL
16.鎬庢牱鍒犻櫎琛ㄤ腑鏌愪釜瀛楁錛?/p>
ALTER TABLE Students DROP COLUMN Address
17.濡備綍璁劇疆鍒楃殑鏍囪瘑灞炴?
娌℃壘鍒板姙娉?/p>
18.濡備綍鍘繪帀鍒楃殑鏍囪瘑灞炴?
娌℃湁鎵懼埌濂界殑鏂規硶,鍙兘鏄厛娣誨姞涓鍒?鐒跺悗鎶婃爣璇嗗垪鐨勫兼洿鏂板埌鏂板姞鍏ョ殑鍒?鍒犻櫎鏍囪瘑鍒?鍐嶇敤涓庢爣璇嗗垪鐩稿悓鐨勫悕瀛楃被鍨嬫坊鍔犱竴鍒?鐢ㄥ墠闈㈠姞鍏ョ殑鍒楁洿鏂拌鍒?濡傛灉璇ユ爣璇嗗垪鏄叾浠栬〃鐨勫閿?榪樿鍏堝垹闄ゅ閿害鏉?寰堥夯鐑?璋佹湁濂界殑鍔炴硶,榪樿鍛婅瘔鎴?
19.濡備綍閲嶈鏍囪瘑鍒楃殑鏍囪瘑縐嶅瓙?
DBCC CHECKIDENT (Student, RESEED, 1)
20.鎬庢牱緇欒〃鍔犱笂涓婚敭錛?/p>
ALTER TABLE Scores ADD CONSTRAINT PK_Scores PRIMARY KEY (StudentID,ClassID)
21.鎬庢牱鍒犻櫎琛ㄧ殑涓婚敭錛?/p>
ALTER TABLE Scores DROP CONSTRAINT PK_Scores
22.鎬庢牱緇欒〃娣誨姞涓涓閿紵
ALTER TABLE Scores ADD CONSTRAINT FK_Scores_Students FOREIGN KEY (StudentID) REFERENCES Students (StudentID) ON DELETE CASCADE
23.鎬庢牱鍒犻櫎琛ㄧ殑涓涓閿紵
ALTER TABLE Scores DROP CONSTRAINT FK_Scores_Students
24.鎬庢牱緇欏瓧孌靛姞涓奀HECK綰︽潫錛?/p>
ALTER TABLE Students ADD CONSTRAINT CK_Students CHECK (Age > 0)
25.鎬庢牱鍘繪帀瀛楁涓婄殑CHECK綰︽潫錛?/p>
ALTER TABLE Students DROP CONSTRAINT CK_Students
26.鎬庢牱緇欏瓧孌佃緗粯璁ゅ鹼紵
ALTER TABLE Students ADD CONSTRAINT DF_Students_Age DEFAULT (18) FOR Age
27.鎬庢牱縐誨幓瀛楁鐨勯粯璁ゅ鹼紵
ALTER TABLE Students DROP CONSTRAINT DF_Students_Age
28.淇敼瀛楁鐨勭被鍨嬪強闈炵┖綰︽潫
ALTER TABLE Students ALTER COLUMN Age char (10) null
ALTER TABLE Students ALTER COLUMN Age int not null
鎸囧畾褰?Transact-SQL 璇彞浜х敓榪愯鏃墮敊璇椂錛孧icrosoft® SQL Server™ 鏄惁鑷姩鍥炴粴褰撳墠浜嬪姟銆?/p>
SET XACT_ABORT { ON | OFF }
褰?SET XACT_ABORT 涓?ON 鏃訛紝濡傛灉 Transact-SQL 璇彞浜х敓榪愯鏃墮敊璇紝鏁翠釜浜嬪姟灝嗙粓姝㈠茍鍥炴粴銆備負 OFF 鏃訛紝鍙洖婊氫駭鐢熼敊璇殑 Transact-SQL 璇彞錛岃屼簨鍔″皢緇х畫榪涜澶勭悊銆傜紪璇戦敊璇紙濡傝娉曢敊璇級涓嶅彈 SET XACT_ABORT 鐨勫獎鍝嶃?/p>
瀵逛簬澶у鏁?OLE DB 鎻愪緵紼嬪簭錛堝寘鎷?SQL Server錛夛紝闅愭ф垨鏄懼紡浜嬪姟涓殑鏁版嵁淇敼璇彞蹇呴』灝?XACT_ABORT 璁劇疆涓?ON銆傚敮涓涓嶉渶瑕佽閫夐」鐨勬儏鍐墊槸鎻愪緵紼嬪簭鏀寔宓屽浜嬪姟鏃躲傛湁鍏蟲洿澶氫俊鎭紝璇峰弬瑙?a href="javascript:hhobj_1.Click()">鍒嗗竷寮忔煡璇?/a>鍜?a href="javascript:hhobj_2.Click()">鍒嗗竷寮忎簨鍔?/a>銆?
SET XACT_ABORT 鐨勮緗槸鍦ㄦ墽琛屾垨榪愯鏃惰緗紝鑰屼笉鏄湪鍒嗘瀽鏃惰緗?/p>
涓嬩緥瀵艱嚧鍦ㄥ惈鏈夊叾瀹?Transact-SQL 璇彞鐨勪簨鍔′腑鍙戠敓榪濆弽澶栭敭閿欒銆傚湪絎竴涓鍙ラ泦涓駭鐢熼敊璇紝浣嗗叾瀹冭鍙ュ潎鎴愬姛鎵ц涓斾簨鍔℃垚鍔熸彁浜ゃ傚湪絎簩涓鍙ラ泦涓紝SET XACT_ABORT 璁劇疆涓?ON銆傝繖瀵艱嚧璇彞閿欒浣挎壒澶勭悊緇堟錛屽茍浣夸簨鍔″洖婊氥?
CREATE TABLE t1 (a int PRIMARY KEY)
CREATE TABLE t2 (a int REFERENCES t1(a))
GO
INSERT INTO t1 VALUES (1)
INSERT INTO t1 VALUES (3)
INSERT INTO t1 VALUES (4)
INSERT INTO t1 VALUES (6)
GO
SET XACT_ABORT OFF
GO
BEGIN TRAN
INSERT INTO t2 VALUES (1)
INSERT INTO t2 VALUES (2) /* Foreign key error */
INSERT INTO t2 VALUES (3)
COMMIT TRAN
GO
SET XACT_ABORT ON
GO
BEGIN TRAN
INSERT INTO t2 VALUES (4)
INSERT INTO t2 VALUES (5) /* Foreign key error */
INSERT INTO t2 VALUES (6)
COMMIT TRAN
GO
/* Select shows only keys 1 and 3 added.
Key 2 insert failed and was rolled back, but
XACT_ABORT was OFF and rest of transaction
succeeded.
Key 5 insert error with XACT_ABORT ON caused
all of the second transaction to roll back. */
SELECT *
FROM t2
GO
DROP TABLE t2
DROP TABLE t1
GO
4.delete from tablea & truncate table tablea鐨勫尯鍒?/span>
truncate璇彞鎵ц閫熷害蹇?/span>,鍗犺祫婧愬皯,騫朵笖鍙褰曢〉鍒犻櫎鐨勬棩蹇楋紱
delete瀵規瘡鏉¤褰曠殑鍒犻櫎鍧囬渶瑕佽褰曟棩蹇?/span>
SQLServer
url=jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=hagov
drive=com.microsoft.jdbc.sqlserver.SQLServerDriver
username=sa
password=sa
dialect=org.hibernate.dialect.SQLServerDialect
import Java.sql.Connection;
import Java.sql.ResultSet;
import Java.sql.Statement;
import Java.sql.SQLException;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.sql.DataSource;
public class Database
{
private Connection m_conn=null;
private Statement m_stmt=null;
private boolean isAutoCommit;
public Database() throws Exception
{
try
{
Context initCtx=new InitialContext();
Context envCtx=(Context)initCtx.lookup(“java:comp/env”);
DataSource ds=(DataSource)envCtx.lookup(“jdbc/SqlServer”);
m_conn=ds.getConnection();
initCtx.close();
envCtx.close();
}
catch(Exception ex)
{
ex..printStackTrace();
System.out.println(“Create Connection Error!”);
throw ex;
}
}
public void close() throws SQLException
{
try
{
if(m_stmt !=null) m_stmt.close();
if(m_conn !=null) m_conn.close();
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println(“Close Connection Error!”);
throw ex;
}
}
public ResultSet executeQuery1(String sql) throws SQLException
{
try
{
m_stmt=m_conn.CreateStatement();
return m_stmt.executeQuery(sql);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println(“Execute SQL:’”+sql+”’ Error!’”);
System.out.println(ex.toString());
System.out.println(ex.getMessage());
throw ex;
}
}
public ResultSet executeQuery2(String sql) throws SQLException
{
try
{
m_stmt=m_conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY);
return m_stmt..executeQuery(sql);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println(“Execute SQL:’”+sql+”’ Error!’”);
System.out.println(ex.toString());
System.out.println(ex.getMessage());
throw ex;
}
}
public int executeUpdate(String sql) throws SQLException
{
try
{
Statement stmt=m_conn.createStatment();
int rt=stmt.executeUpdate(sql);
stmt.close();
return rt;
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println(“Execute SQL:’”+sql+”’ Error!’”);
System.out.println(ex.toString());
System.out.println(ex.getMessage());
throw ex;
}
}
//
寮濮嬫柊浜嬪姟
public void beginTrans() throws SQLException
{
try
{
isAutoCommit=m_conn.getAutoCommit(); //
鑾峰緱褰撳墠鑷姩鎻愪氦鐘舵?/span>
m_conn.setAutoCommit(false);//
紱佹鑷姩鎻愪氦
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println("BeginTrans Error!");
throw ex;
}
}
//
淇濆瓨浠諱綍鏇存敼騫剁粨鏉熷綋鍓嶄簨鍔°傚畠涔熷彲鑳藉惎鍔ㄦ柊浜嬪姟
public void commitTrans() throws SQLException
commit()
鎻愪氦浠庝笂涓嬈℃彁浜?/span>
/
鍥炴粴鎿嶄綔鍚庣殑鏇存敼錛屼嬌涔嬫垚涓烘案涔呯殑鏇存敼錛屽茍閲婃斁
Connection
褰撳墠淇濇寔鐨勪換浣曟暟鎹簱閿併?/span>
鍙湁褰撶姝㈣嚜鍔ㄦ彁浜ゆ椂鍙互浣跨敤璇ユ柟娉曘?/span>
try
{
m_conn.commit();
m_conn.setAutoCommit(isAutoCommit);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println("CommitTrans Error!");
throw ex;
}
}
//
鍙栨秷褰撳墠浜嬪姟涓墍浣滅殑浠諱綍鏇存敼騫剁粨鏉熶簨鍔°傚畠涔熷彲鑳藉惎鍔ㄦ柊浜嬪姟銆?/span>
public void rollbackTrans() throws SQLException
{
try
{
m_conn.rollback();
m_conn.setAutoCommit(isAutoCommit);
}
catch(SQLException ex)
{
ex.printStackTrace();
System.out.println("RollbackTrans Error!");
throw ex;
}
}
}