锘??xml version="1.0" encoding="utf-8" standalone="yes"?> #include <conio.h>//getch() //#include "sqltypes.h"
聽// 聽//鍒涘緩ODBC鍙ユ焺,鍒嗛厤odbc鐜 聽聽聽 //鎵цSQL鏌ヨ璇彞 聽聽聽 //閲婃斁鍙ユ焺 聽 聽 聽 聽 鑱旂郴錛岀害鏉熷茍鍙戞帶鍒訛細澶氱敤鎴瘋闂叡浜暟鎹殑鍐茬獊闂 瀹㈡埛绔綉緇滃疄鐢ㄥ伐鍏?Client Network Utility)錛氱敤鏉ラ厤緗鎴風鐨勭綉緇滆繛鎺ワ紝綆$悊鍜屾祴瀹氬鎴風鐨勬暟鎹簱銆?/p>
浜嬩歡鎺㈠療鍣細鐩戣浜嬩歡澶勭悊鏃ュ織錛屽茍瀵規棩蹇楄繘琛屽垎鏋愬拰閲嶆挱銆?/p>
鏈嶅姟绔綉緇滃疄鐢ㄥ伐鍏?Server Network Utility):閰嶇疆鏈嶅姟鍣ㄧ緗戠粶榪炴帴鍜岃緗浉鍏沖弬鏁般?/p>
瀵煎叆鍜屽鍑烘暟鎹?Imput and Export Data):閲囩敤DTC(data transformation services)鍚戝鏉ュ畬鎴愶紝瀹炵幇鍏朵粬鏁版嵁鍜孲QL 2000鏁版嵁鐨勮漿鎹€?/p>
浼佷笟鐗?win2000 advanced server 棣栬鏁版嵁鏂囦歡 .mdf windows韜喚楠岃瘉妯″紡 姣?娣峰悎妯″紡鍏鋒湁鏇撮珮鐨勫畨鍏ㄦэ紝windows韜喚楠岃瘉妯″紡涓嬪繀欏繪槸鏈湴鐢ㄦ埛鍜屽煙鐢ㄦ埛鎵嶈兘浣跨敤SQL Server 2000 鍗囩駭SQL SERVER:澶囦喚(鍖呮嫭緋葷粺搴撳湪鍐呯殑)鎵鏈夋暟鎹簱錛屽浠芥敞鍐岃〃 鏃ュ織鏂囦歡錛?br />sqlstp.log聽聽 鍦╘windows鎴朶winnt涓?br />setup.log聽聽聽 鍦╘windows鎴朶winnt涓?br />searchsetup.log聽 鍦╘winnt\temp涓?br />errorlog聽聽聽聽 鍦╩ssql\log涓?/p>
緋葷粺鏁版嵁搴擄細 緋葷粺琛細 (涓誨叧閿瓧(涓婚敭)錛?br />鍊欓夊叧閿瓧錛?br />鍏叡鍏抽敭瀛楋細 鏁版嵁搴撳璞★細 鑼冨紡錛氭瀯閫犳暟鎹簱蹇呴』閬靛畧鐨勮鍒欙紝鐩墠鍏崇郴鏁版嵁搴撴湁6縐嶈寖寮忥紝絎竴鑼冨紡(1NF)....錛屼竴鑸渶瑕佹弧瓚?NF SQL(structured query language)緇撴瀯鍖栨煡璇㈣璦 9縐嶈鍙?br />( SQL璇█鍒嗙被錛?br />( 甯哥敤dll璇彞錛?br />( 甯哥敤dml璇彞: 甯哥敤dcl璇彞: 浜嬪姟澶勭悊璇彞錛?br />( 鏁版嵁琛ㄥ悕縐?as 鏁版嵁琛ㄥ埆鍚嶏紝濡傛灉宸茬粡緇欒〃瀹氫簡鍒悕錛屽湪T-SQL璇彞涓簲寮曠敤鍒悕錛岃屼笉鑳界敤鏁版嵁琛ㄥ悕
select cost*quantity as sum select 鏁版嵁琛?join on (鍛樺伐鏁版嵁琛?鍛樺伐緙栧彿=欏圭洰鏁版嵁琛?璐熻矗浜?聽聽聽聽 //鑱旀帴鏉′歡 宓屽select:
like閫氶厤絎︼細 in鐨勭敤渚嬶細 escape鐨勭敤渚嬶細 select id,count(*) //group by 瀵規煡璇㈢粨鏋滃垎緇?br />select id,name having 鎸囧畾鍒嗙粍鎼滅儲鏉′歡錛岄氬父涓巊roup by涓璧風敤 select * asc:鍗囩畫 //compute璁$畻聽 avg,sum,min,max,count (閮戒細蹇藉緥null)
union 瀛愭煡璇腑涓鑸笉鐢∣rder by瀛愬彞錛孫rder by瀛愬彞鐢ㄤ簬鏈緇堢殑緇撴灉 >all,<all, 涓嶈鎶奍f..exists鍜岃仛鍚堝嚱鏁頒竴璧蜂嬌鐢?br /> 鏁版嵁瀹屾暣鎬э細 聽UNIQUE 鍜孭rimary key鐨勫樊寮?br />1銆伮?UNIQUE鍏佽杈撳叆NULL鍊鹼紙鏈澶氫負涓涓級錛岃孭rimary key涓嶅厑璁革紱 寤虹珛璁$畻鍒楋細 淇敼鏁版嵁琛細 鍒犻櫎綰︽潫瀛楁錛?br />ALTER TABAL璁㈣喘欏圭洰A 涓存椂鏁版嵁琛ㄤ互#鎴?#寮澶達紝鐢ㄦ埛鏂紑榪炴帴鍚庤〃琚嚜鍔ㄥ垹闄?/p>
鏁版嵁琛ㄤ腑瀛楁鐨勭綾伙細 鐢ㄦ煡璇㈢粨鏋滃緩绔嬫柊鏁版嵁琛?br />Select * into聽 newtablename聽 from table_source where 鏉′歡 閲嶅璁板綍閲囩敤DISTINCT鏉ヨ幏鍙栧崟鐙殑鏁版嵁銆?/p>
TOP聽 N 涓烘樉紺哄墠N涓暟鎹紝TOP聽 N聽 30聽 PERSENT * FROM 琛ㄥ悕 琛ㄧず鏄劇ずN鐨勫墠30%鐨勬暟鎹?/p>
聽ORDER BY 鎸変粈涔堟柟寮忔帓搴忔樉紺虹粨鏋滐紝ASC鍗嘍ESC闄?/p>
聽JOIN 錛歋ELECT聽 A,B,C聽 FROM聽 T1聽 JOIN聽 T2聽 ON聽 T1.NO=T2.NO JOIN 鐨勭被鍨嬫湁澶氱錛欼NNER錛堥粯璁わ級LEFT錛堜互宸﹁竟涓烘潯浠訛紝濡傛灉鍙寵竟娌℃湁絎﹀悎鐨勬潯浠訛紝鍒欎互NULL錛?br />聽聽聽聽聽聽聽 SELECT 鏃?浜у搧鍚嶇ОAS鏃楁棗鍏徃浜у搧鍚嶇О錛屾棗.浠鋒牸錛屾爣.鎴愬搧鍚嶇ОAS鏍囨爣鍏徃浜у搧鍚嶇О錛屾爣.浠鋒牸 FROM 鏃楁棗鍏徃 AS 鏃?LEFT JOIN 鏍囨爣鍏徃AS鏍?ON鏃?浜у搧鍚嶇О=鏍囦駭鍝佸悕縐?RIGHT錛堜互鍙寵竟涓烘潯浠訛紝濡傛灉宸﹁竟娌℃湁絎﹀悎鐨勬潯浠訛紝鍒欎互NULL錛塅ULL錛堝乏杈瑰彸杈歸兘鏄劇ず錛屽鏋滄病鏈夊垯浠ULL錛?CROSS錛堝皢涓や釜琛ㄧ殑鏁版嵁榪涜姣旇緝錛屽叏閮ㄦ樉紺哄嚭鏉ワ級 鏈夋椂闇瑕佽嚜宸盝OIN鑷繁 鏌ヨ錛歴elect name聽 AS鍑虹増紺懼悕縐?bookname AS 涔﹀悕,sum(quantity) AS 鏁伴噺 from table group by name,bookname with cube 鏌ヨ鏃舵敼鍙樿鏄劇ず鐨勬暟鎹細錛?浠h〃鈥滅敺鈥濓紝0浠h〃鈥滃コ鈥濓級瑕佹眰鏌ヨ鏃跺鏋滄槸1鍒欐樉紺衡滅敺鈥濓紝鍚﹀垯鏄劇ず鈥滃コ鈥?/p>
Select name聽 AS 濮撳悕,case聽 sex聽 when聽 0聽 then 鈥滃コ鈥?else聽 鈥滅敺鈥澛?End聽 AS 鎬у埆聽 From聽 table 聽姣旇緝娓呭崟鏈夛細IN錛孉LL錛孉NY錛圫OME錛夌粨鏋滀負TRUE鎴朏ALSE 聽绱㈠紩鍒嗕負鑱氶泦绱㈠紩鍜岄潪鑱氶泦绱㈠紩 鑱氱劍绱㈠紩鏁版嵁鐨勫瓨鏀句細渚濈収璇ョ儲寮曠殑欏哄簭鏉ュ瓨鏀?/p>
闈炶仛鐒︾儲寮曟暟鎹殑瀛樻斁涓嶄細渚濈収绱㈠紩鐨勯『搴忔潵瀛樻斁 鍥犱負闈炶仛鐒︾儲寮曚笉褰卞搷鏁版嵁鎺掑垪欏哄簭錛屽垯鍙互璁劇疆澶氫釜闈炶仛鐒︾儲寮曪紝鑰岃仛鐒︾儲寮曞垯鏈澶氬彧鑳借緗竴涓紝鍥犱負瀹為檯鏁版嵁鍙兘鏈変竴縐嶆帓鍒楅『搴忋?/p>
(Unique index)绱㈠紩鍊兼槸鍚﹀敮涓錛氬鏋滅儲寮曞間負鍞竴錛屽垯鎴愪負鍞竴绱㈠紩 澶氫釜瀛楁鍋氫負绱㈠紩縐頒負澶嶅悎绱㈠紩錛圕omposite index錛?/p>
Create聽 [UNIQUE]聽 -----鎸囧畾鍞竴 浣跨敤DBCC聽 DBREINDEX閲嶅緩绱㈠紩 濡傛灉鍙兂閲嶅緩绱㈠紩錛堣屼笉淇敼绱㈠紩鐨勭浉鍏寵緗級錛岄偅涔堜嬌鐢―BCC聽 DBREINDEX璇彞姣旇緝鏂逛究錛岃屼笖浣跨敤鏃朵篃鍙寚瀹氶噸寤虹殑濉厖鍥犲瓙銆?/p>
DBCC DBREINDEX錛堚檇atabase_name.owner.table_name鈥?聽 index_name,聽聽 fillfactor錛夋暟鎹簱聽 鏁版嵁搴撴墍鏈夎?琛ㄥ悕聽 閲嶅緩鐨勭儲寮曞悕 璁劇疆鏂扮殑濉厖鍥犲瓙[WITH聽 NO_INFOMSGS]聽聽 -------鏈夋欏癸紝鍒欓噸寤虹儲寮曚笉浼氭樉紺哄嚭淇℃伅 聽瀛樺偍榪囩▼ 聽鍙橀噺鐨勫0鏄庯細 寤虹珛瀛樺偍榪囩▼ EXEC聽 lookup聽 鈥樻潹灝忛泟鈥欙紝@鍦板潃 OUTPUT---OUTPUT琛ㄧず鍙傛暟鐨勫兼槸鍙互榪斿洖鐨?/p>
涓涓瓨鍌ㄨ繃紼嬩負涓涓壒錛屽洜姝ゅ湪鏌ヨ鍒嗘瀽鍣ㄤ腑閬囧埌GO鏃訛紝琛ㄧず瀛樺偍榪囩▼鐨勫畾涔夊凡緇撴潫.鍦ㄥ瓨鍌ㄨ繃紼嬩腑,鏈変簺鍒涘緩瀵硅薄鐨勮鍙ヤ笉鍙嬌鐢?br />CREATE聽 DEFAULT聽聽聽聽聽聽 CREATE聽 TRIGGER 涓存椂瀛樺偍榪囩▼鍒嗕負灞閮ㄥ拰鍏ㄥ眬 淇敼瀛樺偍榪囩▼ALTER PROC 寤虹珛鍑芥暟CREATE聽 FUNCTION聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽 榪斿洖鍗曚釜鏁版嵁鐨勫嚱鏁板拰涓鑸嚱鏁頒竴鏍?br />榪斿洖澶ч噺鏁版嵁闆嗙殑鍑芥暟濡備笅渚嬶細 SELECT * FROM渚濆敭浠鋒煡璇功綾嶏紙400錛?00錛?br />ORDER聽 BY聽 鍗曚環 聽鍑芥暟鍒嗕負紜畾鎬у嚱鏁板拰闈炵‘瀹氭у嚱鏁?br />紜畾鎬у嚱鏁頒負褰撲紶鍏ョ殑鍙傛暟涓嶅彉鏃訛紝榪斿洖鍊間笉鍙橈紝鑰岄潪紜畾鎬у嚱鏁頒負浼犲叆鍙傛暟涓嶅彉錛屼絾姣忔榪斿洖鐨勫間細鏀瑰彉錛堝錛欸ETDATE錛堬級鍑芥暟錛?/p>
聽瑙﹀彂鍣紙Trigger錛夋槸涓縐嶄笌鏁版嵁琛ㄧ揣瀵嗙粨鍚堢殑瀛樺偍榪囩▼錛屽綋璇ユ暟鎹〃鏈夋柊寤猴紙INSERT錛夋洿鏀癸紙UPDATE錛夋垨鍒犻櫎錛圖ELETE錛変簨浠跺彂鐢熸椂錛屾墍璁劇疆鐨勮Е鍙戝櫒浼氳嚜鍔ㄨ鎵ц錛屼互榪涜鏁版嵁瀹屾暣鎬э紝鎴栧叾浠栦竴浜涚壒孌婄殑鏁版嵁澶勭悊宸ヤ綔銆?/p>
瑙﹀彂鍣ㄦ槸閽堝鍗曚竴鏁版嵁琛ㄦ墍鎾板啓鐨勭壒孌婂瓨鍌ㄨ繃紼嬨傝Е鍙戝櫒鐨勭綾諱笌鎿嶄綔錛氳Е鍙戝櫒鍒嗕負2綾?br />AFTER瑙﹀彂鍣細榪欑被瑙﹀彂鍣ㄨ鍦ㄦ暟鎹凡鍙樺姩瀹屾垚涔嬪悗錛圓FTER錛夛紝鎵嶄細琚縺媧誨茍榪涜蹇呰鐨勫杽鍚庡鐞嗘垨媯鏌ャ傝嫢鍙戠幇閿欒錛屽垯鍙敤ROLLBACK聽 TRANSATION鍥炴粴鍏ㄩ儴鏁版嵁銆?br />INSTEAD聽 OF瑙﹀彂鍣細INSTEAD聽 OF 鏄彇浠g殑鎰忔濓紝灝辨槸榪欑被瑙﹀彂鍣ㄤ細鍙栦唬鍘熸湰瑕佽繘琛岀殑鎿嶄綔錛堜緥濡傛柊寤烘垨鏇存敼鏁版嵁搴撴搷浣滐級錛屽洜姝や細鍦ㄦ暟鎹彉鍔ㄥ墠灝卞彂鐢燂紝鑰屼笖鏁版嵁瑕佸浣曞彉鍔ㄤ篃瀹屽叏鍙栧喅浜庤Е鍙戝櫒銆傦紙璇ヨЕ鍙戝櫒鑳藉簲鐢ㄤ笌鏁版嵁琛ㄤ笌瑙嗗浘錛?/p>
寤虹珛瑙﹀彂鍣?br />CREATE聽 TRIGGER聽 trigger_name 渚嬪錛氫笅闈㈠涓涓〃寤虹珛2涓Е鍙戝櫒錛?br />CREATE聽 TRIGGER聽 璁㈠崟淇敼閫氱煡
聽鍒犻櫎瑙﹀彂鍣細DROP聽 TRIGGER聽 trigger_name 聽浜嬪姟閫氬父鏄敱BEGIN聽 TRAN 璇彞寮濮嬶紝涓鐩存墽琛屽埌COMMIT聽 TRAN鎴朢OLLBACK聽 TRAN璇彞鏃舵墠緇撴潫銆?/p>
褰撴墽琛屽畬浜嬪姟涓殑鏈鍚庝竴欏規暟鎹簱鐨勬搷浣滃悗錛岃嫢娌℃湁浠諱綍閿欒錛屾垜浠彲浠ョ敤COMMIT TRAN鎻愪氦浜嬪姟銆傚弽涔嬶紝鑻ュ彂鐜板湪浜嬪姟涓湁浠諱綍鐨勯敊璇紝鍒欐墽琛孯OLLBACK聽 TRAN鍙栨秷浜嬪姟錛屽茍鍥炴粴鑷充簨鍔℃墽琛屽墠鐨勭姸鎬併?/p>
姣忔墽琛屽畬涓欏規暟鎹簱鐨勬搷浣滃悗錛岃绔嬪嵆媯鏌@ERROR鍜孈@ROWCOUNT錛屽惁鍒欏啀鎵ц涓嬩竴欏規暟鎹簱鎿嶄綔鏃訛紝榪?涓郴緇熷彉閲忓皢浼氳鏂扮殑鍊間唬鏇褲傚湪鏇存敼鎴栧垹闄ゆ暟鎹椂錛岃嫢鍥犳寚瀹氭潯浠朵笉絎︽垨鍏朵粬鍘熷洜鑰屾病鏈夋洿鏀瑰埌浠諱綍涓鏉¤褰曪紝鐢變簬榪欑鎯呭喌騫朵笉鏄敊璇紙@@ERROR浠嶄負0錛夛紝鍥犳鎴戜滑榪樿媯鏌@ROWCOUNT鐨勬洿鏀規潯鏁幫紝浠ョ‘瀹氭暟鎹凡姝g‘鏇存敼銆?/p>
聽鏃犺鏄疌OMMIT TRAN榪樻槸ROLLBACK TRAN鑰岀粨鏉熺殑浜嬪姟鍚庯紝濡傛灉鍚庨潰榪樻湁鍏朵粬鏈墽琛岀殑璇彞錛屽垯榪樹細緇х畫鎵ц榪欎簺璇彞錛岀洿鍒版壒緇撴潫銆備笉榪囧凡COMMIT鐨勪簨鍔″氨鏃犳硶鍐峈OLLBACK浜嗭紝鍚岀悊錛屽凡ROLLBACK鐨勪簨鍔′篃鏃犳硶鍐岰OMMIT浜嗐?/p>
聽鍦ㄤ簨鍔′腑錛屾妸浜嬪姟涓墍鏈夌殑璇彞鐪嬫垚鏄竴涓暟鎹鐞嗗崟鍏冿紝鍥犳鍗曞厓蹇呴』鍏ㄩ儴鍋氬畬鎴栧叏閮ㄤ笉鍋氥?/p>
聽浜嬪姟鐨?澶х壒鎬э細
宓屽浜嬪姟鏄互鏈澶栧眰鐨勪簨鍔′負鎻愪氦鎴栧洖婊氬璞$殑銆?br />铏界劧宓屽浜嬪姟鏄互鏈澶栧眰涓烘彁浜ゅ璞$殑錛屼絾鍏朵腑鐨勬瘡涓簨鍔¢兘鏈夎嚜宸辯殑BEGIN TRAN 鍜孋OMMIT 聽@@TRANCOUNT浜嬪姟璁℃暟 娓告爣鐨勭姸鎬侊細 UPDATE 鏍囨爣鍏徃聽聽 SET 浠鋒牸=100聽 WHERE CURRENT聽 OF聽 娓告爣鍚?br />DELETE 鏍囨爣鍏徃聽聽 WHERE CURRENT聽 OF聽 娓告爣鍚?/p>
鑼冧緥錛?br />DECLARE聽 MyCursor聽 CURSORLOCAL聽聽 SCROLL_LOCKS 娓告爣鍙橀噺錛屼嬌鐢⊿ET灝嗗凡緇忓0鏄庡ソ鐨勬父鏍囩粰娓告爣鍙橀噺銆傚湪浣跨敤涓婏紝娓告爣鍙橀噺鍜屾父鏍囨槸涓鏍蜂嬌鐢ㄧ殑 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽 聽
//鎵鏈夌殑ODBC鍑芥暟閮戒互SQL寮濮?/p>
#include <stdio.h>
#include <afxwin.h>//// MFC core and standard components
#include <sqlext.h> //鍖呭惈鏈夋墿灞曠殑ODBC鐨勫畾涔?br />#include <sql.h> //鍖呭惈鏈夊熀鏈殑ODBC API鐨勫畾涔?br />#include <odbcinst.h>
#pragma comment(lib, "odbc32.lib")
#pragma comment(lib, "odbccp32.lib")//SQLConfigDataSource()鍑芥暟
//#include "sqlucode.h"
//#include "odbcss.h"
int main(int argc, char* argv[])
{
聽
聽SQLRETURN sr=SQL_SUCCESS;
聽SQLHENV聽 hEnv=0; //鍒嗛厤odbc鐜
聽SQLHDBC聽 hDbc=0;//
聽SQLHSTMT hStmt;//
聽SQLINTEGER iID;//絎竴鍒?br />聽SQLCHAR tmJoin[20];//絎簩鍒?br />聽聽聽 SQLCHAR szName[10];//絎笁鍒?br />聽SQLREAL fTall;//絎洓鍒?br />聽SQLINTEGER cbID,cbJoin,cbName,cbTall;//淇濆瓨寰楀埌鐨勬暟鎹殑闀垮害
聽//
聽int i=0;
聽SQLCHAR聽聽 SqlState[6];
聽SQLINTEGER NativeError;
聽SQLCHAR ErrMsg[SQL_MAX_MESSAGE_LENGTH];
聽//
聽char szDSN[] = "TestDB";//ODBC鏁版嵁婧?
聽char szUID[] = "sa"; //SQL鐢ㄦ埛
聽char szPWD[] = ""; //鍙d護
聽聽聽 LPCSTR svSQL="select * from [ApiOdbc]";
聽/*瀵逛簬浠諱綍ODBC搴旂敤紼嬪簭鏉ヨ錛岀涓姝ョ殑宸ヤ綔鏄杞介┍鍔ㄧ▼搴忕鐞嗗櫒錛岀劧鍚庡垵濮嬪寲ODBC鐜錛屽垎閰嶇幆澧冨彞鏌勩?br />聽聽聽 棣栧厛錛岀▼搴忎腑澹版槑涓涓猄QLHENV綾誨瀷鐨勫彉閲忥紝鐒跺悗璋冪敤鍑芥暟SQLAllocHandle錛屽悜鍏朵腑浼犻掑垎閰嶇殑涓婅堪SQLHENV綾誨瀷
聽鐨勫彉閲忓湴鍧鍜孲QL_HANDLE_ENV閫夐」銆傚涓嬩唬鐮佹墍紺猴細SQLHENV henv;SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
聽聽聽 鎵ц璇ヨ皟鐢ㄨ鍙ュ悗錛岄┍鍔ㄧ▼搴忓垎閰嶄竴涓粨鏋勶紝璇ョ粨鏋勪腑瀛樻斁鐜淇℃伅錛岀劧鍚庤繑鍥炲搴斾簬璇ョ幆澧冪殑鐜鍙ユ焺銆?br />聽SQLRETURN SQLAllocHandle(
聽聽聽聽聽聽SQLSMALLINT聽聽 HandleType,
聽聽聽聽聽聽SQLHANDLE聽聽聽聽 InputHandle,絎簩涓弬鏁頒負杈撳叆鍙ユ焺
聽聽聽聽聽聽SQLHANDLE *聽聽 OutputHandlePtr 絎笁涓弬鏁頒負杈撳嚭鍙ユ焺
聽聽聽聽聽聽聽);聽聽
聽SQL_HANDLE_ENV錛氱敵璇風幆澧冨彞鏌勩?br />聽聽聽 SQL_HANDLE_DBC錛氱敵璇鋒暟鎹簱榪炴帴鍙ユ焺
聽SQL_HANDLE_STMT錛氱敵璇稴QL璇彞鍙ユ焺錛屾瘡嬈℃墽琛孲QL璇彞閮界敵璇瘋鍙ュ彞鏌勶紝騫朵笖鍦ㄦ墽琛屽畬鎴愬悗閲婃斁*/
聽聽聽
聽//鍒╃敤鍔ㄦ侀摼鎺ュ簱Odbcinst.dll鍔ㄦ佸垱寤篋SN
聽if(SQLConfigDataSource(NULL,ODBC_ADD_SYS_DSN,"SQL Server","DSN=TestDB\0Description=TestAPIODBC\0SERVER=(local)\0DATABASE=TestDB"))
聽{
聽聽printf("32浣峅DBC鏁版嵁婧愰厤緗?Success!\n\n");
聽}
聽聽聽
聽sr = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&hEnv);
聽if(sr==SQL_SUCCESS||sr==SQL_SUCCESS_WITH_INFO)
聽{
聽聽printf("1~~鍒涘緩鐜鍙ユ焺SQLAllocHandle Success!\n");
聽}
聽聽聽 //璁懼畾odbc鐗堟湰,灝哋DBC璁劇疆鎴愪負鐗堟湰3錛屽惁鍒欐煇浜汷DBC API 鍑芥暟涓嶈兘琚敮鎸?br />聽sr = SQLSetEnvAttr(hEnv,SQL_ATTR_ODBC_VERSION,(SQLPOINTER) SQL_OV_ODBC3,SQL_IS_INTEGER);
聽if(sr==SQL_SUCCESS||sr==SQL_SUCCESS_WITH_INFO)
聽{
聽聽printf("2~~SQLSetEnvAttr Success!\n");
聽}
聽//鍒嗛厤odbc榪炴帴鍙ユ焺
聽/*鍒嗛厤鐜鍙ユ焺鍚庯紝鍦ㄥ緩绔嬭嚦鏁版嵁婧愮殑榪炴帴涔嬪墠錛屾垜浠繀欏誨垎閰嶄竴涓繛鎺ュ彞鏌勶紝姣忎竴涓埌鏁版嵁婧愮殑榪炴帴瀵瑰簲浜庝竴涓繛鎺ュ彞鏌勩?br />聽聽聽 棣栧厛錛岀▼搴忓畾涔変簡涓涓猄QLHDBC綾誨瀷鐨勫彉閲忥紝鐢ㄤ簬瀛樻斁榪炴帴鍙ユ焺錛岀劧鍚庤皟鐢⊿QLAllocHandle鍑芥暟鍒嗛厤鍙ユ焺銆傚涓嬩唬鐮佹墍紺猴細
聽聽聽 SQLHDBC hdbc;SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);henv涓虹幆澧冨彞鏌勩?/
聽聽聽 sr = SQLAllocHandle(SQL_HANDLE_DBC,hEnv,&hDbc);
聽聽聽 if(sr==SQL_SUCCESS||sr==SQL_SUCCESS_WITH_INFO)
聽{
聽聽printf("3~~鍒涘緩榪炴帴鍙ユ焺SQL_HANDLE_DBC Success!\n");
聽}
聽聽聽 //榪炴帴榪炴帴灞炴?
聽/*褰撹繛鎺ュ彞鏌勫垎閰嶅畬鎴愬悗錛屾垜浠彲浠ヨ緗繛鎺ュ睘鎬э紝鎵鏈夌殑榪炴帴灞炴ч兘鏈夌己鐪佸鹼紝浣嗘槸鎴戜滑鍙互閫氳繃璋冪敤鍑芥暟SQLSetConnectAttr()
聽鏉ヨ緗繛鎺ュ睘鎬с傜敤鍑芥暟SQLGetConnectAttr()鑾峰彇榪欎簺榪炴帴灞炴с傚嚱鏁版牸寮忓涓嬶細
聽SQLRETURN SQLSetConnectAttr(SQLHDBC ConnectionHandle,SQLINTEGER Attribute,SQLPOINTER ValuePtr,SQLINTEGER StringLength);
聽SQLRETURN SQLGetConnectAttr(SQLHDBC ConnectionHandle,SQLINTEGER Attribute,SQLPOINTER ValuePtr,SQLINTEGER StringLength);
聽聽聽 搴旂敤紼嬪簭鍙互鏍規嵁鑷繁鐨勯渶瑕佽緗笉鍚岀殑榪炴帴灞炴с?/
聽sr = SQLSetConnectAttr(hDbc,SQL_ATTR_LOGIN_TIMEOUT,(void*)7,0);
聽聽聽 if(sr==SQL_SUCCESS||sr==SQL_SUCCESS_WITH_INFO)
聽{
聽聽printf("4~~璁劇疆榪炴帴灞炴QLSetConnectAttr Success!\n");
聽}
聽
聽//榪炴帴
聽/*瀹屾垚瀵硅繛鎺ュ睘鎬х殑璁劇疆涔嬪悗錛屽氨鍙互寤虹珛鍒版暟鎹簮鐨勮繛鎺ヤ簡銆傚浜庝笉鍚岀殑紼嬪簭鍜岀敤鎴鋒帴鍙o紝鍙互鐢ㄤ笉鍚岀殑鍑芥暟寤虹珛榪炴帴錛?br />聽SQLConnect銆丼QLDriverConnect銆丼QLBrowseConnect銆?br />聽聽聽 SQLConnect璇ュ嚱鏁版彁渚涗簡鏈涓虹洿鎺ョ殑紼嬪簭鎺у埗鏂瑰紡錛屾垜浠彧瑕佹彁渚涙暟鎹簮鍚嶇О銆佺敤鎴稩D鍜屽彛浠わ紝灝卞彲浠ヨ繘琛岃繛鎺ヤ簡銆?br />聽聽聽 鍑芥暟鏍煎紡:SQLRETURN SQLConnect(SQLHDBC ConnectionHandle,SQLCHAR ServerName,SQLSMALLINT NameLength1,SQLCHAR UserName,SQLSMALLINT NameLength2,SQLCHAR *Authentication,SQLSMALLINT NameLength3);
聽聽聽 鍙傛暟:ConnectionHandle 榪炴帴鍙ユ焺錛孲erverName 鏁版嵁婧愬悕縐幫紝NameLength1 鏁版嵁婧愬悕縐伴暱搴︼紝UserName 鐢ㄦ埛ID
聽NameLength2 鐢ㄦ埛ID闀垮害錛孉uthentication 鐢ㄦ埛鍙d護錛孨ameLength3 鐢ㄦ埛鍙d護闀垮害
聽榪斿洖鍊?SQL_SUCCESS, SQL_SUCCESS_WITH_INFO, SQL_ERROR, or SQL_INVALID_HANDLE.
聽鎴愬姛榪斿洖SQL_SUCCESS*/
聽sr = SQLConnect(hDbc,(SQLCHAR *)szDSN, SQL_NTS,(SQLCHAR *)szUID,SQL_NTS,(SQLCHAR *)NULL,SQL_NTS);
聽聽聽 /*濡傛灉榪斿洖鍊間負SQL_ERROR鎴朣QL_SUCCESS_WITH_INFO錛屽彲浠ョ敤鍑芥暟SQLGetDiagRec鑾峰彇鐩稿簲SQLSTATE鐨勫?/
聽if(sr != SQL_SUCCESS && sr != SQL_SUCCESS_WITH_INFO)
聽{
聽聽TRACE("ERROR");
聽聽while(SQLGetDiagRec(SQL_HANDLE_DBC,hDbc,i,SqlState, &NativeError,ErrMsg,sizeof(ErrMsg),NULL)!= SQL_NO_DATA)
聽聽聽TRACE("Diag : %d SQLSTATE :%s NativeError : %d ,ErrMsg : %s\n",i ++,SqlState,NativeError,ErrMsg);
聽}
聽else
聽{
聽聽printf("5~~榪炴帴Connect Success!\n");
聽聽聽 }
聽//鍒嗛厤璇彞鍙ユ焺sr = SQLAllocStmt(hDbc,&hStmt);SQLAllocStmt() 宸茶搴熷純錛屼笖鏇挎崲涓?SQLAllocHandle()錛?br />聽sr=SQLAllocHandle(SQL_HANDLE_STMT, hDbc, &hStmt);
聽聽聽 if(sr == SQL_SUCCESS||sr == SQL_SUCCESS_WITH_INFO)
聽{
聽聽printf("6~~鍒嗛厤璇彞鍙ユ焺SQL_HANDLE_STMT Success!\n");
聽}
聽sr=SQLExecDirect(hStmt,(UCHAR *)svSQL,SQL_NTS);
聽聽聽 if (sr == SQL_SUCCESS||sr == SQL_SUCCESS_WITH_INFO)
聽聽聽 {
聽聽聽聽聽聽聽 printf("7~~鎵цSQL鏌ヨ璇彞SQLExecDirect Success!\n");
聽聽printf("\n-------------get date from db-------------\n");
聽聽while ((sr=SQLFetch(hStmt))!=SQL_NO_DATA)
聽聽{
聽聽聽//鎵цSQL璇彞鍚庨亶鍘嗙粨鏋滈泦鏉ュ緱鍒版暟鎹?br />聽聽聽SQLGetData(hStmt, 1, SQL_C_ULONG, &iID, 0, &cbID);
聽聽聽SQLGetData(hStmt, 2, SQL_C_CHAR,聽 tmJoin, 20, &cbJoin);//datatime綾誨瀷鏀懼湪SQLCHAR鏁扮粍涓紝鏁扮粍length瑕佽凍澶?br />聽聽聽SQLGetData(hStmt, 3, SQL_C_CHAR,聽 szName, 10, &cbName);
聽聽聽SQLGetData(hStmt, 4, SQL_C_FLOAT, &fTall, 0, &cbTall);
聽聽聽printf("%d~~~%s~~~%s~~~%f\n",iID,tmJoin,szName,fTall);
聽聽}
聽}
聽if(hStmt!=SQL_NULL_HANDLE)
聽{
聽聽SQLFreeHandle( SQL_HANDLE_STMT, hStmt );
聽聽聽聽 hStmt=NULL;
聽}
聽if(hDbc != SQL_NULL_HANDLE)
聽{
聽聽sr = SQLDisconnect(hDbc);
聽聽SQLFreeHandle(SQL_HANDLE_DBC,hDbc);
聽聽hDbc=NULL;
聽}
聽if(hEnv != SQL_NULL_HANDLE)
聽{
聽聽SQLFreeHandle(SQL_HANDLE_ENV,hEnv);
聽聽hEnv=NULL;
聽}
聽//
聽printf("API ODBC Success!\n");
聽system("PAUSE");
聽return 0;
}
]]>
鏁版嵁妯″瀷:姒傚康鏁版嵁妯″瀷 ----璁捐
聽聽聽聽聽聽聽聽 閫昏緫鏁版嵁妯″瀷錛堝叧緋繪暟鎹ā鍨嬶紝緗戠姸鏁版嵁妯″瀷錛屽眰嬈℃暟鎹ā鍨嬶紝錛?---瀹炵幇
聽聽聽聽聽聽聽聽 鐗╃悊鏁版嵁妯″瀷
鏁版嵁妯″紡錛氭弿榪?/p>
瀹炰綋鈥旇仈緋伙細er妯″瀷
rdbms (鍏崇郴鏁版嵁搴?聽聽聽聽 :聽 sql server ,oracle ,db/2,sybase,informix
Non-rdbms (file-based) :聽 foxpro,access
鏍囧噯鐗?win2000 server
嬈¤鏁版嵁鏂囦歡 .ndf
鏃ュ織鏂囦歡聽聽聽聽 .ldf
master:
model:聽 鏄敤鎴鋒暟鎹簱鍜宼empdb鏁版嵁搴撶殑鎽告澘鏁版嵁搴擄紝鏄垱寤烘柊鏁版嵁搴撶殑鎽告澘
msdb:聽聽 鏄唬鐞嗘湇鍔℃暟鎹簱
tempdb: 涓存椂鏁版嵁搴擄紝榛樿澶у皬8mb錛屼負涓存椂鎿嶄綔鎻愪緵瀛樺偍絀洪棿
pubs:聽聽 紺鴻寖瀛︿範
(
sysobjects琛?br />syscolumns琛?br />sysindexes琛?br />sysusers琛?br />sysdatabases琛?br />sysdepends琛?br />sysconstraints琛?br />)
澶栧叧閿瓧錛氱‘瀹氫富琛ㄥ拰浠庤〃)
(
琛?br />绱㈠紩
瑙嗗浘錛氬叾瀹炴槸铏氳〃錛屾槸鏌ヨ琛ㄤ駭鐢熺殑
鍥捐〃錛氭槸琛ㄤ箣闂寸殑鍏崇郴紺烘剰鍥?br />紜渷鍊鹼細
瑙勫垯錛?br />瑙﹀彂鍣細
瀛樺偍榪囩▼錛?br />鐢ㄦ埛錛?br />)
鏁版嵁鏌ヨ錛歴elect
鏁版嵁瀹氫箟錛歝reate,drop(鍒犻櫎),alter(淇敼)
鏁版嵁鎿嶄綔錛歩nsert,update,delete
鏁版嵁鎺у埗錛歡rant,revoke
)
鏁版嵁瀹氫箟璇█(dll),鐢ㄤ簬瀹氫箟鏁版嵁緇撴瀯
鏁版嵁鎺у埗璇█(dml)錛岀敤浜庢绱㈠拰淇敼鏁版嵁緇撴瀯
鏁版嵁鎺у埗璇█(dcl),鐢ㄤ簬瑙勫畾鏁版嵁搴撶敤鎴風殑鏉冮檺
鏁版嵁搴撲簨鍔″鐞嗭紝鐢ㄦ潵淇濊瘉鏁版嵁搴撶殑瀹屾暣鎬?br />)
create table
create index
drop table聽聽聽 鍒犻櫎鏁版嵁搴撹〃
drop index
truncate聽聽聽聽聽 鍒犻櫎琛ㄤ腑鎵鏈夌殑琛?br />alter table聽聽 澧炲姞琛ㄥ垪錛岄噸瀹氫箟琛ㄥ垪錛屾洿鏀瑰瓨鍌ㄥ垎閰?br />alter table add constraint聽聽 鍦ㄥ凡鏈夌殑琛ㄤ笂澧炲姞綰︽潫
)
(
insert
delete
update
selete
)
(
grant聽 灝嗘潈闄愭垨瑙掕壊鎺堜簣鐢ㄦ埛鎴栧叾浠栬鑹?br />revoke 浠庣敤鎴鋒垨鏁版嵁搴撹鑹插洖鏀舵潈闄?br />set role聽 紱佹鎴栧厑璁歌鑹?br />)
commit work聽 鎶婂綋鍓嶄簨鍔℃墍浣滅殑鏇存敼姘鎬箙鍖?br />rollback聽聽聽聽 浣滃簾涓婃鎻愪氦浠ユ潵鐨勬墍鏈夋洿鏀?br />)
select e.id,e.name from 鐢ㄦ埛琛?as e
select [all | distinct] [top n] selectlist [into[NewtAbleName]]聽 //distinct:鏃犻噸澶嶇殑,selectlist:鍙互鏄〃杈懼紡
聽 from {TableName | ViewName,....}
where聽 conditions
[group by group_by_list]聽 // 鍒嗙粍聽
[having conditions]聽聽聽聽聽聽 // 鍒嗙粍鏉′歡
[order by order_by_list [asc | desc]]
select table1.a,tmptable.b
from table1,
(select table2.c,table2.d
from table2
where table2.id>2) as tmptable
where table1.id=tmptable.id
where:
姣旇緝錛?lt;,<=,>,>=,=,!=,!<,!>
鑼冨洿錛歜etween a and b , not between a and b
鍙夋嫨錛歩n,not in
妯″紡鍖歸厤錛歭ike錛宯ot like
鏄惁絀哄鹼細is null,is not null
閫昏緫錛歛nd,or,not
%聽 錛?like 'wang%'聽聽聽 like '%yi'聽聽
-聽 錛?like '_angyi'聽聽聽
[]聽 錛歭ike '[a-z]angyi'
[~] 錛歭ike '[~w]angyi'
select name
聽 from table
where id in ('4','20')
select *
聽 from table
like 'wang#_yi' escape '#'
聽 from table
where wage>=6000
group by id
聽 from table
where level='2'
group by id,name聽聽聽聽 //鍏堟寜id鍒嗭紝鍦ㄦ寜name鍒?br />with cube聽聽聽聽聽聽聽聽聽聽聽 //瀵筭roup浜х敓鐨勭粍鍐嶆寜緇勭粺璁?br />with rollup聽聽聽聽聽聽聽聽聽 //鍙繑鍥炵涓涓垎緇勬潯浠朵笅鐨勫啀鎸夌粍緇熻
having count(*)>1
聽 from table
where col like '%50[%]%'聽 榪斿洖鍖呭惈50%鐨勫瓧絎︿覆
select id,wage
聽聽 from table
order by 閮ㄩ棬
compute sum(wage) by 閮ㄩ棬
count(distinct 鍒楀悕)
<>all絳変環浜巒ot in
>some,<some
=some 絳変環浜巌n聽 <>some絳変環浜?not in
瀹炰綋瀹屾暣鎬?--琛ㄤ腑鏁版嵁鐨勫敮涓鎬?br />鍖哄煙瀹屾暣鎬?--瀛楁鏁版嵁鑼冨洿鐨勫畬鏁存?br />鍙傝冨畬鏁存?---琛ㄤ笌琛ㄤ箣闂村叧鑱旂殑瀹屾暣鎬?br />
浣跨敤鑰呭畾涔夌殑瀹屾暣鎬?---鐢ㄦ埛鑷繁瀹氫箟鐨勫畬鏁存с傚錛氬鎴鋒瑺6涓湀鐨勯挶錛屼笅嬈″啀涓嬪畾鍗曠殑鏃跺欏氨涓嶅崠緇欎粬銆?br />
鏁版嵁搴撳垎紱伙細浣跨敤SQL璇彞鍒嗙涓篍XEC sp_detach_db 鈥橀攢鍞暟鎹簱鈥?鎸囨槑嬈插垎紱葷殑鏁版嵁搴撳悕縐板嵆鍙傚垎紱誨悗鎯沖啀鐢ㄨ鏁版嵁搴擄紝鍒欓渶瑕侀檮鍔犺鏁版嵁搴擄紝鍏蜂綋SQL璇彞涓猴細
CREATE聽 DATABASE 閿鍞暟鎹簱 ON PRIMARY錛團ILENAME=鈥機:\SQLTEST\閿鍞暟鎹枃浠禵1銆侻DF鈥欙級
FOR聽 ATTACH 鎴栬呬嬌鐢╯p_attach_db緋葷粺瀛樺偍榪囩▼鏉ラ檮鍔犳暟鎹簱錛?br />sp_attach_db聽 閿鍞暟鎹簱
鈥楥:\SQLTEST\閿鍞暟鎹枃浠禵1.MDF鈥?/p>
2銆伮?涓涓暟鎹〃涓彲浠ュ畾涔夊涓猆NIQUE鏉′歡綰︽潫錛屼絾鍙兘瀹氫箟涓涓狿rimary key鏉′歡綰︽潫銆?br />
CHECK綰︽潫鍙敤鏉ラ檺鍒跺瓧孌靛兼槸鍚﹀湪鎵鍏佽鐨勮寖鍥村唴錛屼緥濡傦細
CREATE TABLE 瀹㈡埛02
(
瀹㈡埛緙栧彿 int IDENTITY聽 NULL聽 UNIQUE,
韜喚璇佸彿 char[10] NOT NULL聽 UNIQUE,
騫撮緞聽 int聽 CHECK (騫撮緞>0) DEFAULT 2
)
CREATE TABLE 浼頒環
(
緙栧彿聽 int聽 IDENTITY,聽聽聽聽聽聽聽聽聽聽聽聽聽聽 //鑷姩緙栧彿
鍗曚環聽 numeric(5,1),
鏁伴噺聽 int,
鎬諱環聽 AS 鍗曚環*鏁伴噺
)
insert 浼頒環 values(21.5,8)
insert 浼頒環 values(12,3)
delete from 浼頒環 where 緙栧彿=5 or 緙栧彿=6
drop table 浼頒環
鍒涘緩綰︽潫瀛楁錛?br />Create table 瀹㈡埛
{
瀹㈡埛緙栧彿聽 int聽 IDENTITY聽 Primary Key,------------------------IDENTITY鑷姩浜х敓緙栧彿
韜喚璇佸彿聽 char 18聽 NOT NULL UNIQUE,
鍦板潃聽聽聽聽聽 char(50),
鐢佃瘽聽聽聽聽聽 char (12),
鏉傚織緙栧彿聽 int聽 REFERENCES 鏉傚織縐嶇被錛堟潅蹇楃紪鍙鳳級,
璁㈠崟緙栧彿聽 int聽 NOT NULL,FOREIGN Key(鏉傚織緙栧彿錛岃鎴風紪鍙?
REFERENCES聽 鏉傚織璁㈡埛錛堟潅蹇楃紪鍙鳳紝璁㈡埛緙栧彿錛夛紝
Check(鍦板潃 is NOT NULL聽 OR 鐢佃瘽聽 is聽 NOT NULL)
}
ALTER TABLE 瀹㈡埛A
ADD
綾誨埆緙栧彿 int
DEFAULT 1 WITH VALUES
CONSTRAINT聽 FK_綾誨瀷緙栧彿
FOREIGN KEY
REFERENCES聽 瀹㈡埛綾誨埆錛堢被鍒紪鍙鳳級
DROP CONSTRAINT PK_璁㈣喘欏圭洰A
涓嬮潰鍒犻櫎璁㈣喘欏圭洰A鐨勪袱涓瓧孌?br />ALTER TABLE 璁㈣喘欏圭洰A
DROP COLUMN 瀹氬崟緙栧彿錛岄」鐩紪鍙?br />
嬋媧?鍏抽棴綰︽潫
ALTER TABLE table
{ CHECK | NOCHECK} CONSTRAINT
{ALL | constrant_name{,鈥︹?n}}
Primary key,聽 Foreign Key,聽 NULL,聽 NOT NULL,聽 DEFAULT,聽 UNIQUE,聽 CHECK
SELECT 鍛樺伐.濮撳悕錛屽憳宸?鑱屼綅錛岄暱瀹?濮撳悕AS涓葷
FROM 鍛樺伐 LEFT JOIN 鍛樺伐AS 闀垮畼
ON 鍛樺伐.涓葷緙栧彿=涓葷.緙栧彿 濮撳悕 鑱屼綅 涓葷
聽1
聽a
聽b
聽c
聽2
聽d聽
e聽
NULL
GROUP BY 鎸変粈涔堝垎緇勬樉紺?br />
UNION鎶婁袱涓煡璇㈢粨鏋滃悎騫跺埌涓涓〃涓樉紺哄嚭鏉ユ煡璇㈡椂Group鐨勪嬌鐢紝聽
Select name聽 AS鍚嶇О,Sum(Quantity)鏁伴噺聽 Form聽 table聽 Group聽 By聽 name
GROUP BY鍚庨潰濡傛灉鏈塛ITH CUBE鍒欐妸鍚勪釜緇勮繘琛屾眹鎬昏綆楀悗鏄劇ず緇撴灉聽
嫻嬭瘯瀛樺湪鐢‥XISTS緇撴灉榪斿洖TRUE錛孎ALSE
CREATE聽 TABLE聽 t
(
ProductID聽 smallint聽 not null聽 primary key,
ProductName聽聽 char(30),
Price聽聽 smallmoney,
Manufacturer聽聽 char(30)
)聽聽聽聽聽聽聽聽聽
//鍒涘緩绱㈠紩
CREATE聽聽UNIQUE聽聽聽NONCLUSTERED聽聽聽聽INDEX聽聽聽聽indexname
ON聽聽聽t聽(Price聽聽 DESC)
WITH聽聽聽聽 PAD_INDEX, FILLFACTOR=30,IGNORE_DUP_KEY
//鍒犻櫎绱㈠紩
DROP聽 INDEX聽聽 table.index_name
//淇敼绱㈠紩
浣跨敤DROP_EXISTING淇敼绱㈠紩,濡傛灉瑕佷慨鏀圭儲寮曪紝鍙鍦–REATE聽聽聽 INDEX璇彞鐨勬渶鍚庡姞涓奃ROP_EXISTING鍗沖彲錛堝鏋滃瓨鍦ㄨ绱㈠紩錛屽垯淇敼涔嬶紝鍚﹀垯浼氬彂鐢熼敊璇級
緋葷粺瀛樺偍榪囩▼閮芥槸浠?sp_寮澶?br />鎵╁睍瀛樺偍榪囩▼閫氬父浠p_寮澶?br />EXECUTE 鎵ц瀛樺偍榪囩▼鎴朣QL瀛楃涓詫紙EXEC錛?br />EXEC聽 瀛樺偍榪囩▼鍚嵚犅?鍙傛暟1聽聽 鍙傛暟2聽聽 鍙傛暟3鈥︹?/p>
DECLARE聽 @A聽 int -------------- 鐢熷懡浜嗕竴涓負int 綾誨瀷鐨凙 鍙橀噺銆?/p>
浣跨敤CREATE聽 PROC鎴栬匔REATE聽 PROCEDURE + 榪囩▼鍚?+ AS +SQL璇彞
CREATE聽 PROC聽 MyProcl
AS聽 SELECT * FROM 鏍囨爣鍏徃聽 WHERE 浠鋒牸 >5
GO
EXEC MyProcl
CREATE聽 PROCEDURE聽聽聽 CREATE聽 VIEW
CREATE聽 RULE
灞閮ㄨ浠?寮澶?br />鍏ㄥ眬瑕佷互##寮澶?/p>
鍒犻櫎瀛樺偍榪囩▼DROP PROC
淇敼鍑芥暟聽ALTER聽 FUNCTION聽聽聽聽聽聽聽聽聽聽聽聽聽
鍒犻櫎鍑芥暟DROP聽 FUNCTION
CREATE FUNCTION 渚濆敭浠鋒煡璇功綾?br />錛園鐢?money,聽 @鍒癿oney錛?br />RETURNS TABLE
RETURN聽 錛圫ELECT 涔︾睄緙栧彿錛屼功綾嶅悕縐幫紝鍗曚環 FROM 涔︾睄 WHERE 鍗曚環>=@鐢盇ND鍗曚環<=@鍒幫級
GO
鍦ㄨ皟鐢ㄧ郴緇熷唴緗殑鍑芥暟鏃訛紝闇瑕佸姞涓娐犅?錛氾細濡傦細SELECT * FROM 錛氾細fn_helpcollations()鍦ㄥ垱寤鴻〃鏃跺彲浠ヤ嬌鐢ㄨ繖浜涘嚱鏁般?/p>
ON聽 {table|view}
[with聽 encryption]聽聽聽聽聽聽聽 ------鍔犲瘑
{FOR|AFTER|INSTEAD OF}聽 ------FOR鍜孉FITER閮芥槸瑕佺瓑鍒版暟鎹畬鍏ㄦ搷浣滃畬鍚庢墠嬋媧昏Е鍙戝櫒錛孖NSTEAD OF鍒欒〃紺鴻寤虹珛INSTEAD OF瑙﹀彂鍣紝姝ゆ椂瑙﹀彂鍣ㄥ皢鍙栦唬鍘熸潵瑕佹墽琛岀殑鏁版嵁鎿嶄綔銆?br />{[DELETE][,][INSERT][,][UPDATE]}-----鎸囧畾瑙﹀彂鍣ㄧ殑瑙﹀彂鎿嶄綔錛屽繀欏繪寚瀹氫竴涓紝澶氫釜鏃朵互閫楀彿闅斿紑錛屽湪鍚屼竴鏁版嵁琛ㄤ腑錛孉FTER瑙﹀彂鍣ㄦ暟鐩病鏈夐檺鍒訛紱浣嗗INSTEAD OF 瑙﹀彂鍣ㄦ潵璇村垯闄愬埗DELETE銆両NSERT銆乁PDATE姣忛」鏈澶氬彧鑳芥湁涓涓?br />AS
Sql_statements聽聽聽 ------鐢ㄦ潵瀹氫箟瑙﹀彂鍣ㄧ殑鍐呭銆?/p>
ON聽 璁㈠崟
AFTER聽 INSERT 錛孶PDATE
AS
PRINT聽 鈥樺張鏈夎鍗曡淇敼浜嗭紒鈥?br />GO
CREATE TRGGER 璁㈠崟鍒犻櫎閫氱煡
ON聽 璁㈠崟
AFTER聽 DELETE
AS
PRINT聽 鈥樺張鏈夎鍗曡鍒犻櫎浜嗭紒鈥?br />GO
INSERT 璁㈠崟(鏃ユ湡錛屽鎴風紪鍙?
Values(鈥?000/1/1鈥?3)
Delete璁㈠崟
Where 鏃ユ湡=鈥?000/1/1鈥?/p>
1錛屄?鍘熷瓙鎬э細鏁翠釜浜嬪姟琚湅鎴愪竴涓墽琛屽崟鍏冿紝瑕佷箞鍏ㄩ儴鎴愬姛錛岃涔堝叏閮ㄥ彇娑堛?br />2錛屄?涓鑷存э細褰撲簨鍔″畬鎴愬悗錛屾暟鎹簱鐨勫唴瀹瑰繀欏誨叏閮ㄦ洿鏂板Ε褰擄紝鑰屼笖浠嶇劧鍏峰姝g‘鎬у強瀹屾暣鎬с?br />3錛屄?闅旂鎬э細鍦ㄤ簨鍔′腑鎵浣跨敤鍒扮殑鏁版嵁錛屽繀欏諱笌鍏朵粬鍚屾椂鍦ㄨ繘琛岀殑浜嬪姟閫傚害闅旂錛堜嬌鐢ㄩ攣瀹氭暟鎹殑鏂規硶鏉ラ殧紱諱簨鍔★級
4錛屄?姘鎬箙鎬э細浜嬪姟涓鏃︽彁浜ゅ悗錛屽叾鎵浣滅殑鏁版嵁淇敼灝嗚瑙嗕負姘鎬箙鎬х殑錛屾棤娉曞啀鐢≧OLLBACK鍥炴粴浜嗐?/p>
浜嬪姟鏄互榪炴帴涓哄崟浣嶏紝姣忎釜榪炴帴閮藉彲浠ユ湁鑷繁鐨勪簨鍔°?br />浜嬪姟鐨勬墽琛屾湁3縐嶆ā寮忥細
1錛屄?澶栨樉浜嬪姟2錛屄?鑷姩鎻愪氦浜嬪姟3錛屄?闅愬惈浜嬪姟
鍏跺疄浜嬪姟鏄負瀛樺偍榪囩▼鑰岃璁$殑錛屽洜涓鴻繖鏍鋒垜浠氨鍙互鍦ㄥ瓨鍌ㄨ繃紼嬩腑鎾板啓浜嬪姟紼嬪簭錛岃屼笉鐢ㄦ媴蹇冭紼嬪簭琚皟鐢ㄦ椂鏄惁宸插湪鍙︿竴涓簨鍔′箣涓?/p>
鏃犺鏄偅閲岃皟鐢≧OLLBACK錛岄兘浼氳煩杞埌鏈澶栧眰鐨凚EGIN TRAN澶勶紝@@TRANCOUNT閮戒細鍙樹負0銆傗?br />鏈夋椂鍦ㄤ簨鍔′腑鍙戠敓閿欒鏃訛紝鎴戜滑甯屾湜鍙鍥炴粴涓灝忛儴鍒嗗氨鍙互浜?br />鍒欑敤SAVE TRANSACTION鏉ヨ緗滀簨鍔′繚瀛樼偣鈥濓紝鐒跺悗鍦ㄥ繀瑕佹椂浣跨敤ROLLBACK鏉ュ洖婊氬埌鎵淇濆瓨鐨勪綅緗紝鑰屼笉浼氫腑鏂簨鍔°?br />
ROLLBACK 鍚庣殑浜嬪姟鍚嶇О鍙兘鏄敱SAVATRAN鎴栨渶澶栧眰鐨凚EGIN TRAN鎵澹版槑鐨勪簨鍔″悕縐般?/p>
1
聽Cursor宸叉墦寮錛屽叾鍐呮湁0錛?鎴栧鏉¤褰?br />聽0
聽Cursor宸叉墦寮錛屼絾紜畾鍏跺唴娌℃湁鏌ヨ鍒頒換浣曚竴鏉′俊鎭褰?br />聽-1
聽Cursor宸插叧闂?br />聽-2
聽Cursor鍙橀噺鍚嶆湭鍙傜収鍒版椂闂碈ursor鎴栧弬鐓х殑Cursor宸茶DeAllocale
聽-3
聽鎸囧畾鐨勬父鏍囧彉閲忓悕涓嶅瓨鍦?br />聽
Cursor涓昏鏄嬌鐢ㄤ簬SQL鎵廣佸瓨鍌ㄨ繃紼嬪拰鍑哄彂鍣ㄤ腑銆?br />娓告爣鐨勬牸寮忥細
DECLARE聽 娓告爣鍚嵚?CURSOR聽 -------澹版槑娓告爣
FOR聽 SELECT 濮撳悕聽 FROM 閫氳钖劼?WHERE 鍦板潃=鍙板寳聽聽聽 -------------娓告爣鐨勬暟鎹潵婧?br />OPEN 娓告爣鍚嵚犅?-----------鎵撳紑娓告爣
DECLARE聽 @name聽 varchar(20)
FETCH聽 NEXT聽 FROM聽 娓告爣鍚嵚犅犅犅?------------灝嗙涓鏉℃暟鎹瓨鍏name
INTO聽 @name
WHILE(@@FETCH_STATUS=0)聽聽聽聽聽 -------------鍒ゆ柇鏄惁璇誨埌鏁版嵁錛?琛ㄧず璇誨埌鏁版嵁
BEGIN
聽聽聽FETCH聽 NEXT聽 FROM 娓告爣鍚?br />聽聽 INTO聽 @name
END
CLOSE聽 娓告爣鍚嵚犅?----------------鍏抽棴娓告爣涓庢暟鎹殑鍏寵仈
DEALLOCATE聽 娓告爣鍚嵚?---------------灝嗘父鏍囧璞″垹闄?br />闄や簡Cursor涓璅ETCH鏁版嵁澶栵紝鍙互閫氳繃Cursor鏉PDATE鎴朌ELETE涓鏉$洰鍓嶆墍鎸囧畾鐨勮褰?/p>
FOR聽 SELECT 浠鋒牸FROM聽 鏍囨爣鍏徃
FOR聽 UPDATE
OPEN聽 MyCursor
DECLARE聽 @money聽聽 money
FETCH聽 MyCursor聽 INTO @money
WHILE(@@FETCH_STATUS=0)
BEGIN
聽聽聽聽IF聽 @money<=10
聽聽聽聽聽聽BEGIN
聽聽聽聽聽聽聽聽聽SET @money=money*1.1
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽UPDATE聽 鏍囨爣鍏徃
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽SET 浠鋒牸=@money聽聽聽聽聽聽聽聽聽聽聽聽聽聽 -----------------鏇存柊浠鋒牸淇℃伅
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽WHERE聽聽 CURRENT OF MyCursor
聽聽聽聽聽聽聽END
FETCH聽 MyCursor聽 INTO @money
END
鍏ㄥ眬娓告爣鍜屾湰鍦版父鏍囨湁鐩稿悓鐨勫彉閲忔椂錛屼互鏈湴娓告爣涓轟紭鍏堣皟鐢?/p>
聽
]]>
ATL(Active鏍鋒澘搴?
UDA閫氱敤鏁版嵁璁塊棶錛屼嬌鐢∣LE DB璁塊棶浠諱綍鏁版嵁搴?鐢監LE DB,ADO,ODBC緇勬垚
RDO榪滅▼鏁版嵁瀵硅薄
DAO鏁版嵁璁塊棶瀵硅薄
ODBC寮鏀炬暟鎹簱浜掕繛
ADO(Active Data Object)鏄竴涓闂甇LE DB鐨勭被灞?br />OLE DB鏈変竴緇凜OM鎺ュ彛緇勬垚
ODBC鐨勬鏋?br />1銆備嬌鐢ㄩ┍鍔ㄥ櫒綆$悊鍣ㄥ拰鐗瑰畾鐨勬暟鎹簱椹卞姩鍣ㄦ潵鑾峰緱ODBC,
2銆傚埄鐢∣DBC鏉ヨ皟鐢ㄥ簲鐢ㄧ▼搴忥紝璁塊棶ODBC椹卞姩鍣ㄧ鐞嗗櫒(ODBC32DLL)錛?br />3銆傚埄鐢∣DBC椹卞姩鍣ㄧ鐞嗗櫒璋冪敤鏁版嵁搴撴寚瀹氱殑ODBC椹卞姩鍣紝
4銆傚埄鐢ㄦ暟鎹簱鎸囧畾鐨凮DBC椹卞姩鍣ㄦ潵璁塊棶鏁版嵁搴?/p>
ODBC璁塊棶澶氱鏁版嵁搴?br />聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽|->Oracle ODBC鏁版嵁搴撻┍鍔ㄥ櫒
ODBC搴旂敤紼嬪簭-->ODBC椹卞姩鍣ㄧ鐞嗙▼搴?->|聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽-->鍏崇郴鏁版嵁搴撴暟鎹簮
聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽聽|->SQL Server鏁版嵁搴撻┍鍔ㄥ櫒
CObject綾?CDatabase CRecordset璁塊棶鏁版嵁搴撴簮
DSN鍏卞垎涓轟笁綾伙細
鐢ㄦ埛DSN錛氬褰撳墠鐧誨綍鐢ㄦ埛鍙錛屽彧鑳藉鐢ㄤ簬褰撳墠璁$畻鏈恒?br />緋葷粺DSN錛氬褰撳墠緋葷粺涓婃墍鏈夌敤鎴峰彲瑙侊紝鍖呮嫭NT涓殑鏈嶅姟銆?br />鏂囦歡DSN錛欴SN淇℃伅瀛樻斁鍦ㄦ枃浠朵腑錛屽鑳藉璁塊棶鍒拌鏂囦歡鐨勭敤鎴峰彲瑙併?/p>
涓涓嬌鐢ˋccess鏁版嵁搴撶殑DSN涓殑淇℃伅濡備笅錛?br />[ODBC]
DRIVER=Driver do Microsoft Access (*.mdb)
UID=Admin
DefaultDir=C:\DB
DBQ=C:\DB\1.mdb
鍦ㄤ嬌鐢∣DBC寮鍙戞椂涓涓噸瑕佺殑闂灝辨槸鏁版嵁杞崲鐨勯棶棰?鍦ㄧ▼搴忚繍琛岃繃紼嬩腑鏁版嵁闇瑕佺粡鍘嗕袱嬈¤漿鎹細C璇█鐨勬暟鎹垨緇撴瀯綾誨瀷涓嶰DBC鐨勬暟鎹被鍨嬬殑杞崲錛孫DBC涓嶴QL闂存暟鎹被鍨嬬殑杞崲
ODBC涓殑鍙ユ焺鍒嗕負涓夌被錛氱幆澧冨彞鏌勶紝鏁版嵁搴撹繛鎺ュ彞鏌勶紝SQL璇彞鍙ユ焺