版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1本章概述2.1概述
2.2注釋
2.3變量
2.4運(yùn)算符
2.5SQL函數(shù)
2.6流程控制語(yǔ)句22.1概述T-SQL就是Transact-SQL,是標(biāo)準(zhǔn)SQL在MSSQL環(huán)境下程式設(shè)計(jì)語(yǔ)言的增強(qiáng)版,它是用來(lái)讓?xiě)?yīng)用程式與SQLServer溝通的主要語(yǔ)言。T-SQL提供標(biāo)準(zhǔn)SQL的DDL和DML功能,加上延伸的函數(shù)、系統(tǒng)預(yù)存程序以及程式設(shè)計(jì)結(jié)構(gòu)(例如IF和WHILE)讓程式設(shè)計(jì)更有彈性,T-SQL的功能隨著新版的SQLServer而持續(xù)成長(zhǎng)。T-SQL的批處理是一組的擴(kuò)展SQL語(yǔ)句,在一個(gè)批處理中可以包含一條或多條Transact-SQL語(yǔ)句,成為一個(gè)語(yǔ)句組。兩個(gè)GO之間的SQL語(yǔ)句作為一個(gè)批處理。這樣的語(yǔ)句組從應(yīng)用程序一次性地發(fā)送到SQLServer服務(wù)器進(jìn)行執(zhí)行。SQLServer服務(wù)器將批處理編譯成一個(gè)可執(zhí)行單元,稱(chēng)為執(zhí)行計(jì)劃。3示例--該批處理執(zhí)行打開(kāi)數(shù)據(jù)庫(kù)UsesampleGo/*批處理結(jié)束標(biāo)志*/--該批處理檢索項(xiàng)目部員工Select*From員工數(shù)據(jù)表Where所屬部門(mén)=‘項(xiàng)目部’
and工資>2000Orderby姓名Go--下面的批處理創(chuàng)建視圖CreateviewPM-ViewAsSelect*from員工數(shù)據(jù)表where所屬部門(mén)=‘項(xiàng)目部’Go
42.2格式化的TSQL代碼在SQLServer中,有兩種類(lèi)型的注釋字符:?jiǎn)涡凶⑨專(zhuān)菏褂脙蓚€(gè)連在一起的減號(hào)“--”作為注釋符;多行注釋?zhuān)菏褂谩?**/”作為注釋符。2.2.1注釋2.2.2結(jié)束TSQL語(yǔ)句的標(biāo)準(zhǔn)TSQL標(biāo)準(zhǔn)規(guī)定在每個(gè)命令行末尾使用分號(hào)結(jié)束該部分的批處理TSQL語(yǔ)句,但需要注意的是,TSQL技術(shù)分號(hào)是可選擇的,但是請(qǐng)不要在下面的位置使用分號(hào):不要在tryend后面添加分號(hào)不要在if語(yǔ)句后面添加分號(hào)必須在CET之前添加分號(hào)52.3變量2.3.1全局變量全局變量在整個(gè)SQLServer系統(tǒng)內(nèi)使用。存儲(chǔ)的通常是一些SQLServer的配置設(shè)定值和統(tǒng)計(jì)數(shù)據(jù)。在使用全局變量時(shí)應(yīng)該注意以下幾點(diǎn):全局變量是在服務(wù)器級(jí)定義的。用戶(hù)只能使用預(yù)先定義的全局變量。引用全局變量時(shí),必須以標(biāo)記符“@@”開(kāi)頭。全局變量對(duì)用戶(hù)來(lái)說(shuō)是只讀的。局部變量的名稱(chēng)不能與全局變量的名稱(chēng)相同有關(guān)全局變量的全部?jī)?nèi)容和解釋參見(jiàn)幫助文檔6舉例SQL-sever提供的全局變量共有33個(gè),但是并不是每一個(gè)都會(huì)用到。下面舉例說(shuō)明全局變量@@ERROR的用法:UsesampleGo--將項(xiàng)目部的工資更新為Update員工數(shù)據(jù)表Set工資=3000where所屬部門(mén)='項(xiàng)目部'--檢查是否出現(xiàn)限制檢查沖突If@@ERROR=547print'出現(xiàn)限制檢查沖突,請(qǐng)檢查需要更新的數(shù)據(jù)‘
@@ERROR全局變量將返回最后執(zhí)行的T-SQL語(yǔ)句的錯(cuò)誤代碼,數(shù)據(jù)類(lèi)型為integer,如果成功@@ERROR返回0,否則返回錯(cuò)誤代碼。有關(guān)錯(cuò)誤代碼的信息請(qǐng)?jiān)趕ysmessages系統(tǒng)表中查找。本例子中檢測(cè)限制檢查沖突。7舉例下面舉例說(shuō)明全局變量@@RowCount的用法:該變量用以判別查詢(xún)是否成功,并返回查詢(xún)到的行數(shù)。updatestudentsetsname='叮當(dāng)'wheresname='老叮當(dāng)';if@@rowcount=0beginprint'沒(méi)有修改任何行'end82.3變量2.3.2局部變量利用局部變量還可以保存程序執(zhí)行過(guò)程中的中間數(shù)據(jù)值,保存由存儲(chǔ)過(guò)程返回的數(shù)據(jù)值等。1.局部變量的定義
必須先用DECLARE命令定義后才可以使用。DECLAER{@local_variabledata_type}[…n]
2.局部變量的賦值方法
SET{{@local_variable=expression}或者SELECT{@local_variable=expression}[,...n]
91、通過(guò)SET進(jìn)行附值declare@char1float,@numchar(40)select@char1=max(degree)fromscore,coursewherecname='高等數(shù)學(xué)'ando=oset@num='高等數(shù)學(xué)的最高成績(jī)是:'print@num+STR(@char1)2、通過(guò)SELECT進(jìn)行附值注意事項(xiàng):(1)如果查詢(xún)之中select返回多個(gè)值,則僅僅將最后一個(gè)數(shù)值附值給變量(2)如果沒(méi)有返回值則保持當(dāng)前的變量值案例見(jiàn)下10舉例:UsesampleGo--開(kāi)始聲明局部變量Declare@max_salaryint--將其賦值為全體員工的工資最大值Select@max_salary=max(工資)from員工數(shù)據(jù)表Go(注意:局部變量的作用范圍是從聲明該局部變量的地方開(kāi)始到聲明局部變量的批處理或存儲(chǔ)過(guò)程的結(jié)尾。在局部變量的作用范圍以外引用該局部變量將引起語(yǔ)法錯(cuò)誤。)案例見(jiàn)下112.4臨時(shí)表和全局表2.4.1局部臨時(shí)表
SQL
Server
支持臨時(shí)表。臨時(shí)表就是那些名稱(chēng)以井號(hào)
(#)
開(kāi)頭的表。如果當(dāng)用戶(hù)斷開(kāi)連接時(shí)沒(méi)有除去臨時(shí)表,SQL
Server
將自動(dòng)除去臨時(shí)表。臨時(shí)表不存儲(chǔ)在當(dāng)前數(shù)據(jù)庫(kù)內(nèi),而是存儲(chǔ)在系統(tǒng)數(shù)據(jù)庫(kù)
tempdb
內(nèi)。
局部臨時(shí)表的創(chuàng)建方法與用戶(hù)表相同,但是臨時(shí)表的名稱(chēng)前面必須打上#。實(shí)際上,臨時(shí)表是在tempdb建立的。其生命周期自批處理開(kāi)始生成,自該批處理結(jié)束終止,該臨時(shí)表將從tempdb庫(kù)中被刪除。局部臨時(shí)表往往在存儲(chǔ)過(guò)程開(kāi)發(fā)中被設(shè)計(jì),至該存儲(chǔ)過(guò)程結(jié)束終止。例子:createtable#stupass(snointprimarykey,snamevarchar(20),sdegreeint,cnamevarchar(20));122.4臨時(shí)表和全局表2.4.2全局臨時(shí)表
以?xún)蓚€(gè)井號(hào)
(##)
開(kāi)頭的那些表名。在所有連接上都能看到全局臨時(shí)表。如果在創(chuàng)建全局臨時(shí)表的連接斷開(kāi)前沒(méi)有顯式地除去這些表,那么只要所有其它任務(wù)停止引用它們,這些表即被除去。當(dāng)創(chuàng)建全局臨時(shí)表的連接斷開(kāi)后,新的任務(wù)不能再引用它們。當(dāng)前的語(yǔ)句一執(zhí)行完,任務(wù)與表之間的關(guān)聯(lián)即被除去;因此通常情況下,只要?jiǎng)?chuàng)建全局臨時(shí)表的連接斷開(kāi),全局臨時(shí)表即被除去。
例子:createtable##stupass(snointprimarykey,snamevarchar(20),sdegreeint,cnamevarchar(20));132.4臨時(shí)表和全局表2.4.3全局臨時(shí)表
全局表和臨時(shí)表的差異:二者在名稱(chēng)、可見(jiàn)性和可用性上均不相同。本地臨時(shí)表的名稱(chēng)以單個(gè)數(shù)字符號(hào)
(#)
打頭;它們僅對(duì)當(dāng)前的用戶(hù)連接是可見(jiàn)的;當(dāng)用戶(hù)從
Microsoft
SQL
Server實(shí)例斷開(kāi)連接時(shí)被刪除。全局臨時(shí)表的名稱(chēng)以數(shù)學(xué)符號(hào)
(##)
打頭,創(chuàng)建后對(duì)任何用戶(hù)都是可見(jiàn)的,當(dāng)所有引用該表的用戶(hù)從SQL
Server斷開(kāi)連接時(shí)被刪除。
例如,如果創(chuàng)建名為employees的表,則任何人只要在數(shù)據(jù)庫(kù)中有使用該表的安全權(quán)限就可以使用該表,除非它已刪除。如果創(chuàng)建名為#employees的本地臨時(shí)表,只有您能對(duì)該表執(zhí)行操作且在斷開(kāi)連接時(shí)該表刪除。如果創(chuàng)建名為##employees的全局臨時(shí)表,數(shù)據(jù)表中的任何用戶(hù)均可對(duì)該表執(zhí)行操作。如果該表在您創(chuàng)建后沒(méi)有其他用戶(hù)使用,則當(dāng)您斷開(kāi)連接時(shí)該表刪除。如果該表在您創(chuàng)建后有其他用戶(hù)使用,則
SQL
Server在所有用戶(hù)斷開(kāi)連接后刪除該表。142.4運(yùn)算符
算術(shù)運(yùn)算符
算術(shù)運(yùn)算符包括加(+)、減(-)、乘(*)、除(/)和取模(%)
賦值運(yùn)算符Transact-SQL中只有一個(gè)賦值運(yùn)算符,即等號(hào)(=)4.2.3位運(yùn)算符位運(yùn)算符包括按位與(&)、按位或(|)、按位異或(^)和求反(~)。位運(yùn)算符用來(lái)對(duì)整型數(shù)據(jù)或者二進(jìn)制數(shù)據(jù)(image數(shù)據(jù)類(lèi)型除外)之間執(zhí)行位操作。要求在位運(yùn)算符左右兩側(cè)的操作數(shù)不能同時(shí)是二進(jìn)制數(shù)據(jù)。152.4運(yùn)算符2.4.4比較運(yùn)算符比較運(yùn)算符包括:等于(=)、大于(>)、大于或等于(>=)、小于(<)、小于或等于(<=)、不等于(<>或!=)、不小于(!<)、不大于(!>)。
2.4.5邏輯運(yùn)算符邏輯運(yùn)算符包括與(AND)、或(OR)和非(NOT)等運(yùn)算符。邏輯運(yùn)算返回布爾值,值為T(mén)RUE或FALSE。
162.4運(yùn)算符2.2.6
字符串連接運(yùn)算符
(+)2.4.7運(yùn)算符的優(yōu)先級(jí)括號(hào):();乘、除、求模運(yùn)算符:*,/,%;加減運(yùn)算符:+,-;比較運(yùn)算符:=,>,<,>=,<=,<>,!=,!>,!<;位運(yùn)算符:^,&,|;邏輯運(yùn)算符:NOT;邏輯運(yùn)算符:AND;邏輯運(yùn)算符:OR。172.6流程控制語(yǔ)句2.6.1BEGIN…END語(yǔ)句
BEGIN{sql_statement|statement_block}END2.6.2IF…ELSE語(yǔ)句
IFBoolean_expression{sql_statement|statement_block}[ELSE{sql_statement|statement_block}]
182.6流程控制語(yǔ)句舉例例子1:UsesampleGo--聲明用于發(fā)布消息的變量Declare@messagevarchar(200)--判斷是否在辦公室工作Ifexist(Select*from員工數(shù)據(jù)表where所屬部門(mén)=‘辦公室’)--如果有,則列出姓名Beginset@message=“下列人員在辦公室:”
print@messageselect員工姓名from員工數(shù)據(jù)表where所屬部門(mén)=‘辦公室’End--否則,輸出沒(méi)有人的在工作的消息Else192.6流程控制語(yǔ)句舉例BeginSet@message=“抱歉,沒(méi)有人在辦公室”P(pán)rint@messageEndGo注意:begin和end分別表示語(yǔ)句塊的開(kāi)始和結(jié)束,而且他們必須成對(duì)使用。例子2:UsesampleGoDeclare@messagevarchar(200)--判斷是否存在工資超過(guò)5000的員工Ifexist(Select*員工姓名,工資from員工數(shù)據(jù)表where工資>5000)End--否則,輸出沒(méi)有工資以上的員工202.6流程控制語(yǔ)句舉例(if..else)ElseBeginSet@message=“抱歉,并沒(méi)有員工的工資在5000元以上”P(pán)rintmessageEnd例子3(下面的例子中,如果平均書(shū)價(jià)大于15元,則輸出一個(gè)消息,否則輸出另外的一個(gè)消息)If(select*avg(price)fromtitle)>$15print‘我們可以打折!’Elseprint‘我們將要提價(jià)!’例子3:(如果select語(yǔ)句不止是一個(gè)值,就可以使用一個(gè)特殊的if語(yǔ)句,即ifexists)Ifexists(select*fromtitlewherepub_id=‘9933’)212.6流程控制語(yǔ)句舉例(ifexists)BeginPrint“包含如下圖書(shū):”Select*fromtitleswherepub_id=‘9933’EndElsePrint“暫時(shí)沒(méi)有您要找的圖書(shū)”222.6流程控制語(yǔ)句2.6.3WHILE…CONTINUE…BREAK語(yǔ)句
WHILEBoolean_expression{sql_statement|statement_block}[BREAK]{sql_statement|statement_block}[CONTINUE]23WHILE…CONTINUE…BREAK語(yǔ)句例子(下面的這個(gè)例子將判斷是否有員工的獎(jiǎng)金少于300元,如果有則將所有的員工的工資增加300,否則將所有員工增加500元,直到所有的員工的獎(jiǎng)金都是多于300或者是有的員工的工資已經(jīng)超過(guò)了10000元)UsesampleGo--根據(jù)是否存在員工的平均工資少于3000而確定循環(huán)是否繼續(xù)執(zhí)行While(selectavg(工資)from員工數(shù)據(jù)表)<3000--循環(huán)開(kāi)始beginUpdate員工數(shù)據(jù)表Set工資=工資+5--如果有的員工的工資已經(jīng)超過(guò)了10000元,則跳出循環(huán)print'沒(méi)有的員工的工資已經(jīng)超過(guò)了10000元,繼續(xù)循環(huán)'If(selectmax(工資)from員工數(shù)據(jù)表)>10000Breakelsecontinueend--循環(huán)結(jié)束print'有的員工的工資已經(jīng)超過(guò)了10000元,停止循環(huán)'24declare@salarymoney,@min_moneymoney,@max_moneymoney,@avg_moneymoneyselect@min_money=MIN(工資),@max_money=MAX(工資),@avg_money=AVG(工資)FROM員工數(shù)據(jù)表while@avg_money<4000beginupdate員工數(shù)據(jù)表
set工資=工資+500if@max_money>5000breakelsecontinueend例子2252.6.4CASE語(yǔ)句2.6.4CASE語(yǔ)句簡(jiǎn)單CASE語(yǔ)句的語(yǔ)法形式為:CASEinput_expressionWHENwhen_expressionTHENresult_expression[...n][ELSEelse_result_expression]END
搜索CASE語(yǔ)句的語(yǔ)法形式為:CASEWHENBoolean_expressionTHENresult_expression[...n][ELSEelse_result_expression]END262.6.4CASE語(yǔ)句舉例例子:UsesampleGoSelect姓名,“部門(mén)說(shuō)明”=--分別為各個(gè)部門(mén)說(shuō)明情況Case所屬部門(mén)
when‘辦公室’
then‘在辦公室工作,該部門(mén)主要負(fù)責(zé)辦公室的工作?!?/p>
when‘項(xiàng)目部’
then‘在項(xiàng)目部工作,該部門(mén)主要負(fù)責(zé)項(xiàng)目部的工作?!?/p>
when‘錄入部’
then‘在錄入部工作,該部門(mén)主要負(fù)責(zé)錄入部的工作。’
when‘技術(shù)部’
then‘在技術(shù)部工作,該部門(mén)主要負(fù)責(zé)技術(shù)部的工作?!?/p>
……….EndFrom員工數(shù)據(jù)表--按照員工的數(shù)據(jù)表排序Orderby姓名272.6.5waitfor語(yǔ)句Waitfordelay時(shí)間間隔……(期間的時(shí)間間隔將指定Waitfor
語(yǔ)句執(zhí)行之前需要等待的時(shí)間,最多是24小時(shí))Waitfortime時(shí)間值……(期間的時(shí)間值將指定Waitfor
語(yǔ)句執(zhí)行的時(shí)間)例子:UsesalpleGo--指定在執(zhí)行select語(yǔ)句之前需要等待3秒Waitfordelay’00:00:02’--執(zhí)行查詢(xún)(select姓名,性別from員工數(shù)據(jù)表where所屬部門(mén)=‘項(xiàng)目部’)282.6.6GOTO語(yǔ)句語(yǔ)法結(jié)構(gòu):GOTOlabel(標(biāo)簽名稱(chēng))……label:例子:UsesampleGoIf(selectmax(工資)from員工數(shù)據(jù)表)>10000Gotodecrease_salary…….Decrease_salary:……(注意:人們認(rèn)為GOTO語(yǔ)句是影響可讀性的嚴(yán)重因素,在使用的時(shí)候盡可能避免使用GOTO語(yǔ)句,因?yàn)檫^(guò)多的GOTO語(yǔ)句可能會(huì)造成T-SQL的邏輯混亂而難以理解。另外,標(biāo)簽僅僅標(biāo)示了跳轉(zhuǎn)的目標(biāo),它并不隔離其前后的語(yǔ)句。只要標(biāo)簽前面的語(yǔ)句本身不是流程控制語(yǔ)句,標(biāo)簽前后的語(yǔ)句將按照順序正常執(zhí)行,就如同沒(méi)有使用標(biāo)簽一樣。)292.6.7Print語(yǔ)句語(yǔ)法格式如下:Print{‘a(chǎn)nyASCIItext’|@local_variable|@@global_variable}既可以輸出“字符串”或者“字符串常量”或者“字符串變量”舉例:Print”你好嗎?”P(pán)rint@@version302.6.8錯(cuò)誤處理1.Try…Catch
這是MSSQL2005特有的一種標(biāo)準(zhǔn)的捕獲和處理錯(cuò)誤的方法,其基本理念是,嘗試執(zhí)行一個(gè)代碼塊,如果發(fā)生錯(cuò)誤,則在Catch代碼塊之中捕獲錯(cuò)誤。基本用法
BEGINTRY
{sql_statement|statement_block};
ENDTRY
BEGINCATCH
{sql_statement|statement_block}
ENDCATCH312.6.8錯(cuò)誤處理1.Try…Catch
和普通語(yǔ)言的異常處理用法差不多,但要注意的是,SQLSERVER只捕捉那些不是嚴(yán)重的異常,當(dāng)比如數(shù)據(jù)庫(kù)不能連接等這類(lèi)異常時(shí),是不能捕捉的。BEGINTRYDECLARE@XINT--0為除數(shù)錯(cuò)誤SET@X=1/0PRINT'CommandaftererrorinTRYblock'ENDTRYBEGINCATCHPRINT'ErrorDetected'ENDCATCHPRINT'CommandafterTRY/CATCHblocks'例子1:322.6.8錯(cuò)誤處理1.Try…Catchtrycatch可以嵌套的案例例子2:2.錯(cuò)誤函數(shù)錯(cuò)誤函數(shù)返回值Error_Message()錯(cuò)誤的消息文本Error_Number()錯(cuò)誤編號(hào)Error_Procedure()發(fā)生錯(cuò)誤的存儲(chǔ)過(guò)程或觸發(fā)器的名稱(chēng)Error_Serverity()錯(cuò)誤的嚴(yán)重程度Error_State()錯(cuò)誤的狀態(tài)例子3:332.6.8錯(cuò)誤處理3.Catch塊一般處理的工作如果批處理使用了邏輯結(jié)構(gòu)(begintran/committran),則錯(cuò)誤處理程序應(yīng)回滾事務(wù)。建議首先會(huì)滾事務(wù),以釋放該事務(wù)執(zhí)行的鎖定。如果錯(cuò)誤是存儲(chǔ)過(guò)程邏輯檢測(cè)到的,則系統(tǒng)將自動(dòng)引發(fā)錯(cuò)誤消息。如果有必要,將錯(cuò)誤記錄到錯(cuò)誤表中。結(jié)束批處理,如果它是存儲(chǔ)過(guò)程、用戶(hù)定義函數(shù)或觸發(fā)器,可使用return命令結(jié)束它。344.5函數(shù)4.5.1系統(tǒng)函數(shù)
獲取SQL-sever的系統(tǒng)信息。1、COL_LENGTH(expression)返回列的定義長(zhǎng)度(以字節(jié)為單位)。2、DATALENGTH(expression)返回任何表達(dá)式所占用的字節(jié)數(shù)。舉例:UsesampleGoSelectcol_length(‘員工數(shù)據(jù)表’,‘員工姓名’)asname_data_length,Datalength(‘員工姓名’)asname_data_lengthfrom員工數(shù)據(jù)表(注解:col_length()函數(shù)可以返回列的長(zhǎng)度)3、ISNUMERIC(expression)/返回類(lèi)型int確定表達(dá)式是否為一個(gè)有效的數(shù)字類(lèi)型。舉例:USEschoolSELECTISNUMERIC(sno)FROMstudentGO354、USER_ID()返回用戶(hù)的數(shù)據(jù)庫(kù)標(biāo)識(shí)號(hào)。5、USER_NAME()返回給定標(biāo)識(shí)號(hào)的用戶(hù)數(shù)據(jù)庫(kù)用戶(hù)名。USER_NAME([id])id用來(lái)返回用戶(hù)名的標(biāo)識(shí)號(hào)。id的數(shù)據(jù)類(lèi)型為int。注釋當(dāng)省略id
時(shí),則假定為當(dāng)前用戶(hù)。必須加上圓括號(hào)。舉例子:SELECTUSER_ID('MY-TOMATO'),USER_NAME('MY-TOMATO')364.5.2字符串函數(shù)使用字符傳函數(shù)對(duì)字符串輸入值執(zhí)行操作,以獲得字符串或者所需要的數(shù)字值。1、CHAR(數(shù)字變量)功能:將ASC碼轉(zhuǎn)換成為字符串;注意:ASC碼是指0——255之間的整數(shù)2、LEFT(字符串表達(dá)式,整數(shù))功能:返回從字符串左邊開(kāi)始多少個(gè)字符3、LTRIM函數(shù)功能:刪除字符串的前導(dǎo)空格4、REPLACE(’第一個(gè)字符串’,’第二個(gè)字符串’,’第三個(gè)字符串’)用第三個(gè)表達(dá)式替換第一個(gè)字符串表達(dá)式中出現(xiàn)的所有第二個(gè)給定字符串表達(dá)式5、SUBSTRING(表達(dá)式,開(kāi)始點(diǎn),結(jié)束點(diǎn))返回字符、binary、text或image表達(dá)式的一部分。6、CAST與CONVERT函數(shù)實(shí)現(xiàn)數(shù)據(jù)的格式轉(zhuǎn)化。將某種數(shù)據(jù)類(lèi)型的表達(dá)式顯式轉(zhuǎn)換為另一種數(shù)據(jù)類(lèi)型。CAST和CONVERT提供相似的功能使用CAST:CAST(expression
ASdata_type)使用CONVERT:CONVERT(data_type[(length)],expression[,style])7、LEN(string_expression)返回給定字符串表達(dá)式的字符(而不是字節(jié))個(gè)數(shù),其中不包含尾隨空格378.LOWER()將大寫(xiě)字符數(shù)據(jù)轉(zhuǎn)換為小寫(xiě)字符數(shù)據(jù)后返回字符表達(dá)式9.UPPER()返回將小寫(xiě)字符數(shù)據(jù)轉(zhuǎn)換為大寫(xiě)的字符表達(dá)式。例子:createtabletitles(titlevarchar(24),pricemoney)insertintotitlesvalues('PPd',3.63)SELECTLOWER(SUBSTRING(title,1,20))ASLower,UPPER(SUBSTRING(title,1,20))ASUpper,LOWER(UPPER(SUBSTRING(title,1,20)))AsLowerUpperFROMtitlesWHEREpricebetween1.00and200.003810、CHARINDEX(expression1,expression2[,start_location])返回字符串中指定表達(dá)式的起始位置。SELECTCHARINDEX('麗',sname)FROMstudent11、REPLICATE(character_expression,integer_expression)以指定的次數(shù)重復(fù)字符表達(dá)式。declare@cvarchar(12)set@c='我是誰(shuí)'SELECTREPLICATE(@c,4)12、REVERSE(character_expression)返回字符表達(dá)式的反轉(zhuǎn)。declare@cvarchar(12)set@c='我是誰(shuí)'SELECTREVERSE(@c)13、STUFF(character_expression,start,length,character_expression)
刪除指定長(zhǎng)度的字符并在指定的起始點(diǎn)插入另一組字符。SELECTSTUFF('請(qǐng)問(wèn)你誰(shuí)是周星馳啊',6,3,'大笨蛋')394.5.3日期函數(shù)1、DATEADD(datepart,number,date)在向指定日期加上一段時(shí)間的基礎(chǔ)上,返回新的datetime值。2、DATEDIFF(datepart,startdate,enddate)返回跨兩個(gè)指定日期的日期和時(shí)間邊界數(shù)。3、DATENAME(datepart,date)返回代表指定日期的指定日期部分的字符串。4、DATEPART(datepart,date)返回代表指定日期的指定日期部分的整數(shù)。5、year(),month(),day()返回年月日6、GETDATE()函數(shù)返回今天的日期404.5.4
數(shù)學(xué)函數(shù)可以使用數(shù)學(xué)函數(shù)執(zhí)行各種算術(shù)或函數(shù)運(yùn)算1.ABS()函數(shù)(絕對(duì)值)精確數(shù)字或近似數(shù)字?jǐn)?shù)據(jù)類(lèi)型類(lèi)別的表達(dá)式(bit數(shù)據(jù)類(lèi)型除外)。例子:SELECTABS(-2147483648)2.CEILING()(取整函數(shù))返回大于或等于所給數(shù)字表達(dá)式的最小整數(shù)。例子SELECTCEILING($123.45),CEILING($-123.45),CEILING($0.0)GO3.FLOOR()(取整函數(shù))返回小于或等于所給數(shù)字表達(dá)式的最大整數(shù)。示例SELECTFLOOR(123.45),FLOOR(-123.45),FLOOR($123.45)比較CEILING和FLOORCEILING函數(shù)返回大于或等于所給數(shù)字表達(dá)式的最小整數(shù)。FLOOR函數(shù)返回小于或等于所給數(shù)字表達(dá)式的最大整數(shù)。例如,對(duì)于數(shù)字表達(dá)式12.9273,CEILING將返回13,F(xiàn)LOOR將返回12。FLOOR和CEILING返回值的數(shù)據(jù)類(lèi)型都與輸入的數(shù)字表達(dá)式的數(shù)據(jù)類(lèi)型相同414.ROUND()(四舍五入函數(shù))返回?cái)?shù)字表達(dá)式并四舍五入為指定的長(zhǎng)度或精度。語(yǔ)法ROUND(numeric_expression,length[,function])例子1.使用ROUND和估計(jì)值下例顯示兩個(gè)表達(dá)式,說(shuō)明使用ROUND函數(shù)且最后一個(gè)數(shù)字始終是估計(jì)值。SELECTROUND(123.9994,3),ROUND(123.9995,3)GO例子2.使用ROUND和四舍五入的近似值SELECTROUND(123.4545,2)SELECTROUND(123.45,-2)5.sign(n),當(dāng)n>0,返回1,n=0,返回0,n<0,返回-1DECLARE@valuerealSET@value=-1WHILE@value<2BEGINSELECTSIGN(@value)SELECT@value=@value+1END425.RAND([seed])返回0到1之間的隨機(jī)float值。DECLARE@countersmallintSET@counter=1WHILE@counter<5BEGINSELECTRAND(@counter)Random_NumberSET@counter=@counter+1END434.5.6用戶(hù)自定義函數(shù)
CreateFunction函數(shù)名稱(chēng)(形式參數(shù)名稱(chēng)
AS數(shù)據(jù)類(lèi)型)Returns返回?cái)?shù)據(jù)類(lèi)型Begin函數(shù)內(nèi)容Return表達(dá)式End調(diào)用用戶(hù)自定義函數(shù)的基本語(yǔ)法為:變量=用戶(hù)名.函數(shù)名稱(chēng)(實(shí)際參數(shù)列表)注意:在調(diào)用返回?cái)?shù)值的用戶(hù)自定義函數(shù)時(shí),一定要在函數(shù)名稱(chēng)的前面加上用戶(hù)名
SQLSERVER創(chuàng)建了用戶(hù)自定義的函數(shù),它同時(shí)具備了視圖和存儲(chǔ)過(guò)程的優(yōu)點(diǎn),但是卻犧牲了可移植性。44一、標(biāo)量函數(shù)1、標(biāo)量函數(shù)是返回單個(gè)值的函數(shù)。這類(lèi)函數(shù)可以接收多個(gè)參數(shù),但是返回的值只有一個(gè),所有的函數(shù)將使用return返回一個(gè)值。2、在用戶(hù)定義的函數(shù)中,return命令應(yīng)當(dāng)是最后一條執(zhí)行的命令。3、用戶(hù)定義的函數(shù)不能夠?qū)τ跀?shù)據(jù)進(jìn)行更新,但是可以使用視圖操作。語(yǔ)法標(biāo)量函數(shù)CREATEFUNCTION[用戶(hù)名.]定義的函數(shù)名
([{@變量名
[AS]變量類(lèi)型
[,...n]])RETURNS返回值的數(shù)據(jù)類(lèi)型[AS]BEGIN
declare@返回值變量
function_body
RETURN@返回值變量
END45用戶(hù)自定義函數(shù)舉例:1、CREATEfunctionaverc(@cnovarchar(12))returnsintasbegindeclare@averintselect@aver=(selectavg(degree)fromscorewherecno=@cnogroupbycno)return@averenddeclare@eeintdeclare@wwvarchar(12)set@ww='3-105‘exec@ee=dbo.averc@wwselect@ee=dbo.averc(@ww)print@ee46用戶(hù)自定義函數(shù)舉例(標(biāo)量函數(shù))學(xué)生問(wèn)題:見(jiàn)下面的例子47內(nèi)嵌表值函數(shù)CREATEFUNCTION[用戶(hù)名.]用戶(hù)定義的函數(shù)名
([{@局部變量名
[AS]局部變量數(shù)據(jù)類(lèi)型
}[,...n]])RETURNSTABLE
[AS]RETURN(
select-stmt
)二、內(nèi)嵌表值函數(shù)內(nèi)嵌表值用戶(hù)定義函數(shù)沒(méi)有由begin/end標(biāo)識(shí)的程序體。取而代之的是將select語(yǔ)句作為table數(shù)據(jù)類(lèi)型加以返回。48用戶(hù)自定義函數(shù)舉例:內(nèi)嵌表值函數(shù)--創(chuàng)建函數(shù),查詢(xún)選修了某門(mén)課程的學(xué)生姓名createfunctionfn_view(@cnamevarchar(20))returnstableasreturn(selectsnamefromstudentwheresnoin(selectsnofromscorewherecnoin(selectcnofromcoursewherecname=@cname)))declare@eevarchar(20)set@ee='高等數(shù)學(xué)'select*fromfn_view(@ee)49用戶(hù)自定義函數(shù)舉例:--建立函數(shù),輸入一個(gè)學(xué)生的學(xué)號(hào)就可以知道他的姓名,選修課程名--以及該門(mén)課程的成績(jī)createfunctionstu_avg_table(@snovarchar(20))returns@stu_avgtable(snovarchar(12),snamevarchar(20),cnamevarchar(20),degreeint)asbegininsert@stu_avgselectstudent.sno,sname,cname,degreefromstudent,score,coursewherestudent.sno=score.snoando=oandstudent.sno=@snoreturnenddeclare@rrvarchar(20)set@rr='103'select*fromstu_avg_table(@rr)50用戶(hù)自定義函數(shù)舉例(內(nèi)嵌表值函數(shù))商品銷(xiāo)售問(wèn)題:見(jiàn)下面的例子512.6游標(biāo)一、簡(jiǎn)介到目前為止,所有的SQL語(yǔ)句是采用面向集合的方法來(lái)處理和操作數(shù)據(jù)的,是針對(duì)行的集合進(jìn)行的操作。應(yīng)用WHERE子句指出的行包含在該集合之中,必須對(duì)每一行進(jìn)行同樣的工作。例如:返回集合的條件行(SELECT),改變集合中的每一行的同一個(gè)列(UPDATE),刪除集合中的每一個(gè)行(DELETE)等。二、關(guān)于游標(biāo)的引入面向集合的一種替代方法就是游標(biāo)的概念的引入。它允許每次一行的操作,基于行的內(nèi)容,可以決定采取的下一步行為。注意:不得不按照每次一行的方式來(lái)處理行(游標(biāo))時(shí)候的性能,開(kāi)銷(xiāo)相對(duì)于面向集合的方式來(lái)處理行的性能是巨大的。在解決使用游標(biāo)之前,應(yīng)該確定已經(jīng)仔細(xì)分析了需求,并且無(wú)法通過(guò)別的編程方法來(lái)解決問(wèn)題。某些情況下面,游標(biāo)是非常有用的,但是它應(yīng)當(dāng)是程序設(shè)計(jì)員最后的手段,而并不應(yīng)當(dāng)成為第一的選擇!522.6游標(biāo)概念:游標(biāo)實(shí)際上是用戶(hù)在系統(tǒng)中開(kāi)設(shè)的一個(gè)數(shù)據(jù)緩沖區(qū),存放SQL語(yǔ)句的執(zhí)行結(jié)果。游標(biāo)的使用:游標(biāo)中存放查詢(xún)結(jié)果的一組記錄,用戶(hù)可以通過(guò)移動(dòng)游標(biāo)指針逐一訪(fǎng)問(wèn)記錄,獲得結(jié)果,并賦給主變量,交由主語(yǔ)言進(jìn)一步處理。532.6游標(biāo)使用游標(biāo)的五個(gè)步驟:聲明游標(biāo);打開(kāi)游標(biāo);利用游標(biāo)讀取、修改或刪除所取的行;關(guān)閉游標(biāo);釋放游標(biāo)。542.6游標(biāo)1、聲明游標(biāo)DECLAREcursor_nameCURSORFORselect_statement2、打開(kāi)游標(biāo):opencursor_name3、關(guān)閉游標(biāo)Closecursor_name關(guān)閉游標(biāo)后可釋放其所占用的資源。若要再次使用,可再打開(kāi)4、釋放游標(biāo) deallocatecursor_name5、使用游標(biāo)取數(shù):FETCH(NEXT|PRIOR|FIRST|LAST)FROMcursor_name552.6游標(biāo)如下例中聲明并打開(kāi)游標(biāo)useschool--定義游標(biāo)階段DECLAREstu_cursorCURSORFORSELECTsnameFROMstudent--打開(kāi)游標(biāo)階段OPENstu_cursor--獲取游標(biāo)階段[游標(biāo)移動(dòng)階段]FETCHNEXTFROMstu_cursor--關(guān)閉游標(biāo)階段closestu_cursor--釋放游標(biāo)階段deallocatestu_cursor562.6游標(biāo)在簡(jiǎn)單的游標(biāo)中使用FETCH介紹幾個(gè)在游標(biāo)使用過(guò)程中有用的全局變量1、@@cursor_rows返回連接上最后打開(kāi)的游標(biāo)中當(dāng)前存在的合格行的數(shù)量。2、@@FETCH_STATUS回被FETCH語(yǔ)句執(zhí)行的最后游標(biāo)的狀態(tài).0表示FETCH語(yǔ)句成功。572.6游標(biāo)在簡(jiǎn)單的游標(biāo)中使用FETCHUSEschoolGODECLARE@snamevarchar(40)DECLAREstu_cursorCURSORFORSELECTsnameFROMstudentOPENstu_cursorFETCHNEXTFROMstu_cursorINTO@snameWHILE@@FETCH_STATUS=0BEGINPRINT'學(xué)生姓名:'+@snameFETCHNEXTFROMstu_cursorINTO@snameENDCLOSEstu_cursorDEALLOCATEstu_cursorGO582.6游標(biāo)剛才我們看到關(guān)鍵詞:FETCHNEXT是推動(dòng)游標(biāo)向前移動(dòng)的關(guān)鍵。除此以外,還包括以下的移動(dòng):FETCH關(guān)鍵字移動(dòng)位置FIRST數(shù)據(jù)集第一條記錄LAST數(shù)據(jù)集末一條記錄PRIOR前一條記錄NEXT后一條記錄RELATIVE按照相對(duì)位置決定移動(dòng)的位置ABSOLUTE按照絕對(duì)位置決定移動(dòng)的位置592.6游標(biāo)DECLARE@snamevarchar(40)DECLAREstu_cursorCURSORFORSELECTsnameFROMstudent
OPENstu_cursordeclare@snamevarchar(20)FETCHNEXTFROMstu_cursorINTO@snameprint@snamedeclare@snamevarchar(20)FETCHpriorFROMstu_cursorINTO@snameprint@sname系統(tǒng)將提示:fetch:提取類(lèi)型prior不能用于只進(jìn)游標(biāo)。這是為什么?602.6游標(biāo)游標(biāo)分類(lèi)游標(biāo)可以按照它所支持的提取選項(xiàng)進(jìn)行分類(lèi):只進(jìn)必須按照從第一行到最后一行的順序提取行。FETCHNEXT是唯一允許的提取操作??蓾L動(dòng)性[scroll]可以在游標(biāo)中任何地方隨機(jī)提取任意行。允許所有的提取操作(但動(dòng)態(tài)游標(biāo)不支持絕對(duì)提?。?。612.6游標(biāo)語(yǔ)法改進(jìn):DECLARE@snamevarchar(40)DECLAREstu_cursorCURSORscrollFORSELECTsnameFROMstudent
OPENstu_cursordeclare@snamevarchar(20)FETCHNEXTFROMstu_cursorINTO@snameprint@snamedeclare@snamevarchar(20)FETCHpriorFROMstu_cursorINTO@snameprint@sname622.6游標(biāo)使用FETCH將值存入變量DECLARE@snamevarchar(30),@svarchar(400)DECLAREstu_cursorCURSORFORSELECTsnameFROMstudentOPENstu_cursorFETCHNEXTFROMstu_cursorINTO@sWHILE@@FETCH_STATUS=0BEGINFETCHNEXTFROMstu_cursorINTO@sname
set@s=ltrim(rtrim(@s))+','+ltrim(rtrim(@sname))ENDprint@sCLOSEstu_cursorDEALLOCATEstu_cursorGO為什么最后一行總是重復(fù)出現(xiàn)!632.6游標(biāo)使用游標(biāo)修改或刪除數(shù)據(jù)DECLAREabcCURSORFORSELECTsNameFROMStudentOPENabcGOFETCHNEXTFROMabcGOUPDATEstudentSETsName='豬頭'WHERECURRENTOFabcGOCLOSEabcDEALLOCATEabcGO642.6游標(biāo)復(fù)雜的游標(biāo)查詢(xún)問(wèn)題:
——使用遞歸游標(biāo)遍歷樹(shù)算法解決家族樹(shù)的問(wèn)題問(wèn)題提出:如何解決某個(gè)人所有的子孫后代的顯示呢?基本算法思路:生成一棵樹(shù),用游標(biāo)來(lái)獲取每個(gè)孩子的編號(hào)和姓名,而后以這些孩子的編號(hào)為遞歸的標(biāo)準(zhǔn),再次查詢(xún)孩子的孩子,直到游標(biāo)置底。652.6游標(biāo)復(fù)雜的游標(biāo)查詢(xún)問(wèn)題:
——使用遞歸游標(biāo)遍歷樹(shù)算法解決家族樹(shù)的問(wèn)題注意:當(dāng)游標(biāo)較少時(shí)候,使用該算法解決遍歷問(wèn)題已經(jīng)足夠;但是當(dāng)數(shù)據(jù)量較大時(shí)候,就會(huì)出現(xiàn)問(wèn)題。主要由兩個(gè)原因造成:1、MSSQL限制存儲(chǔ)過(guò)程循環(huán)次數(shù)最多32層。2、性能問(wèn)題?;谛械挠螛?biāo)比基于集合的查詢(xún)性能上面將慢50到70倍。設(shè)定:將500萬(wàn)行數(shù)據(jù)組織為12個(gè)層次,需要進(jìn)行游標(biāo)調(diào)用500萬(wàn)次,開(kāi)辟500萬(wàn)個(gè)緩沖空間,執(zhí)行500萬(wàn)次的select查詢(xún)66一、從遞歸的SQL查詢(xún)說(shuō)開(kāi)去1、一個(gè)問(wèn)題創(chuàng)建一個(gè)存儲(chǔ)過(guò)程,查詢(xún)“福建省”的所有用戶(hù),并且將他們的電子郵件連接起來(lái),中間用“;”分割后附值給一個(gè)內(nèi)存變量,以便調(diào)用。67一、從遞歸的SQL查詢(xún)說(shuō)開(kāi)去2、遞歸調(diào)用的基本語(yǔ)法Select@variable=@variable+d.columnFromtableasd68二、關(guān)于游標(biāo)的基礎(chǔ)知識(shí)1、簡(jiǎn)介到目前為止,所有的SQL語(yǔ)句是采用面向集合的方法來(lái)處理和操作數(shù)據(jù)的,是針對(duì)行的集合進(jìn)行的操作。應(yīng)用WHERE子句指出的行包含在該集合之中,必須對(duì)每一行進(jìn)行同樣的工作。例如:返回集合的條件行(SELECT),改變集合中的每一行的同一個(gè)列(UPDATE),刪除集合中的每一個(gè)行(DELETE)等。2、關(guān)于游標(biāo)的引入面向集合的一種替代方法就是游標(biāo)的概念的引入。它允許每次一行的操作,基于行的內(nèi)容,可以決定采取的下一步行為。69注意:1、游標(biāo)是有害的?。≡趯?shí)際測(cè)試中,游標(biāo)的效率是正常SQLselect查詢(xún)的1/50到1/70。2、不得不按照每次一行的方式來(lái)處理行(游標(biāo))時(shí)候的性能,開(kāi)銷(xiāo)相對(duì)于面向集合的方式來(lái)處理行的性能是巨大的。在解決使用游標(biāo)之前,應(yīng)該確定已經(jīng)仔細(xì)分析了需求,并且無(wú)法通過(guò)別的編程方法來(lái)解決問(wèn)題。某些情況下面,游標(biāo)是非常有用的,但是它應(yīng)當(dāng)是程序設(shè)計(jì)員最后的手段,而并不應(yīng)當(dāng)成為第一的選擇!703、概念:游標(biāo)實(shí)際上是用戶(hù)在系統(tǒng)中開(kāi)設(shè)的一個(gè)數(shù)據(jù)緩沖區(qū),存放SQL語(yǔ)句的執(zhí)行結(jié)果。4、游標(biāo)的使用:游標(biāo)中存放查詢(xún)結(jié)果的一組記錄,用戶(hù)可以通過(guò)移動(dòng)游標(biāo)指針逐一訪(fǎng)問(wèn)記錄,獲得結(jié)果,并賦給主變量,交由主語(yǔ)言進(jìn)一步處理。二、關(guān)于游標(biāo)的基礎(chǔ)知識(shí)715、游標(biāo)的生命周期游標(biāo)的生命周期包含5個(gè)階段:1、聲明游標(biāo):為游標(biāo)指定獲取數(shù)據(jù)時(shí)候的select語(yǔ)句。聲明的游標(biāo)并不會(huì)檢索任何的數(shù)據(jù),僅僅為游標(biāo)指定select的查詢(xún)范圍
Declare游標(biāo)名稱(chēng)cusorcursoroptionsForselect語(yǔ)句2、打開(kāi)游標(biāo)
Open游標(biāo)名稱(chēng)3、取出游標(biāo)中的信息
Fetch游標(biāo)名稱(chēng)into@變量1,@變量2
該操作將使得游標(biāo)移動(dòng)到下一行記錄,并將游標(biāo)返回的每個(gè)列的數(shù)據(jù)分別賦值給本地變量,這些變量必須預(yù)先予以聲明。4、關(guān)閉游標(biāo),釋放數(shù)據(jù),但是保留select語(yǔ)句,以后還可以通過(guò)open方法打開(kāi)(open命令與close相似)
Close游標(biāo)名稱(chēng)5、釋放游標(biāo),釋放相關(guān)內(nèi)存,并刪除游標(biāo)定義
Deallocate游標(biāo)名稱(chēng)通常配合@@fetch_status形成循環(huán):@@fetch_status標(biāo)量的意義:0——最近一次fetch命令成功的獲取到一行數(shù)據(jù)1——最近一次fetch命令到達(dá)結(jié)果集的尾部2——最近一次獲取的行不可用;改行已經(jīng)被刪除72在使用游標(biāo)之前,需要聲明游標(biāo)。具體格式如下:DECLARE游標(biāo)的名稱(chēng)CURSOR
/*用于指定T-SQL服務(wù)器游標(biāo)的名稱(chēng)*/[LOCAL/GLOBAL]
/*用于指定該游標(biāo)的名稱(chēng)是全局的還是局部的*/[FORWARD_ONLY|SCROLL]/*游標(biāo)只能從第一行滾動(dòng)到最后一行。SCROLL
語(yǔ)句見(jiàn)后*/[READ_ONLY]/*禁止游標(biāo)進(jìn)行數(shù)據(jù)更新*/FOR選擇語(yǔ)句/*這里是標(biāo)準(zhǔn)的select語(yǔ)句,它將定義游標(biāo)將要處理的結(jié)果集合*/[FORUPDATE[OF字段名稱(chēng)1,字段名稱(chēng)2,字段名稱(chēng)3,….]]/*UPDATE定義游標(biāo)內(nèi)可以更新的列*/5、游標(biāo)的定義73關(guān)鍵字移動(dòng)位置FIRST數(shù)據(jù)集第一條記錄LAST數(shù)據(jù)集末一條記錄PRIOR前一條記錄NEXT后一條記錄RELATIVE按照相對(duì)位置決定移動(dòng)的位置ABSOLUTE按照絕對(duì)位置決定移動(dòng)的位置74UsesampleGo--聲明游標(biāo)Declarepm_cursorcursorreadonlyFORselect*from員工數(shù)據(jù)表where所屬部門(mén)=‘項(xiàng)目部’Orderby姓名75三、SQLServer全文索引
在一個(gè)產(chǎn)品介紹網(wǎng)站中查詢(xún)產(chǎn)品時(shí),由于產(chǎn)品的介紹性文字可能會(huì)很長(zhǎng),如果使用對(duì)產(chǎn)品介紹字段使用like進(jìn)行模糊查詢(xún),性能肯定會(huì)是問(wèn)題。那么如何解決這個(gè)問(wèn)題呢?第一個(gè)想法就是使用全文索引。那么全文索引是什么、應(yīng)該如何應(yīng)用、在應(yīng)用的過(guò)程中又應(yīng)該注意哪些事情呢?76三、SQLServer全文索引
1、什么是全文檢索
[摘錄自SQLServer2000聯(lián)機(jī)從書(shū)]
全文索引為在字符串?dāng)?shù)據(jù)中進(jìn)行復(fù)雜的詞搜索提供有效支持。全文索引存儲(chǔ)關(guān)于重要詞和這些詞在特定列中的位置的信息。全文查詢(xún)利用這些信息,可快速搜索包含具體某個(gè)詞或一組詞的行。
全文索引包含在全文目錄中。每個(gè)數(shù)據(jù)庫(kù)可以包含一個(gè)或多個(gè)全文目錄。一個(gè)目錄不能屬于多個(gè)數(shù)據(jù)庫(kù),而每個(gè)目錄可以包含一個(gè)或多個(gè)表的全文索引。一個(gè)表只能有一個(gè)全文索引,因此每個(gè)有全文索引的表只屬于一個(gè)全文目錄。
全文目錄和索引不存儲(chǔ)在它們所屬的數(shù)據(jù)庫(kù)中。目錄和索引由Microsoft搜索服務(wù)分開(kāi)管理。
全文索引必須在基表上定義,而不能在視圖、系統(tǒng)表或臨時(shí)表上定義。77三、SQLServer全文索引
可以做這樣一個(gè)比喻。大家大概都見(jiàn)過(guò)檔案柜,檔案柜是將各種檔案按照分類(lèi)登記在檔案索引卡上,這個(gè)檔案柜中的索引卡就象建立的全文索引,通過(guò)這些檔案索引卡可以迅速定位你要查找的卷宗所在的位置。如果不建立這些索引卡,如果卷宗數(shù)量不多還好,一旦檔案數(shù)量很多的時(shí)候顯然很難找到期望的卷宗,這就類(lèi)似使用Like的情形。78三、SQLServer全文索引
全文索引和普通索引的區(qū)別:普通SQL索引
全文索引
存儲(chǔ)時(shí)受定義它們所在的數(shù)據(jù)庫(kù)的控制存儲(chǔ)在文件系統(tǒng)中,但通過(guò)數(shù)據(jù)庫(kù)管理每個(gè)表允許有若干個(gè)普通索引每個(gè)表只允許有一個(gè)全文索引當(dāng)對(duì)作為其基礎(chǔ)的數(shù)據(jù)進(jìn)行插入、更新或刪除時(shí),它們會(huì)自動(dòng)更新將數(shù)據(jù)添加到全文索引稱(chēng)為填充,全文索引可通過(guò)調(diào)度或特定請(qǐng)求來(lái)請(qǐng)求,也可以在添加新數(shù)據(jù)時(shí)自動(dòng)發(fā)生不分組在同一個(gè)數(shù)據(jù)庫(kù)內(nèi)分組為一個(gè)或多個(gè)全文目錄使用SQLServer企業(yè)管理器、向?qū)Щ騎ransact-SQL語(yǔ)句創(chuàng)建和除去使用SQLServer企業(yè)管理器、向?qū)Щ虼鎯?chǔ)過(guò)程創(chuàng)建、管理和除去79三、SQLServer全文索引
2、配置全文檢索服務(wù)實(shí)驗(yàn)
首先建立檢索表的全文檢索,全文檢索要求唯一索引,故需要在相關(guān)表建立唯一聚集索引。這一步實(shí)驗(yàn)可以使用SQLDDL或者SQLServerManagementStudio建立表的全文檢索;或者通過(guò)鍵入命令EXECSP_FULLTEXT_DATA
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年在線(xiàn)購(gòu)物服務(wù)合同
- 藝術(shù)展覽視頻制作服務(wù)合同范文
- 網(wǎng)球場(chǎng)裝修標(biāo)準(zhǔn)合同范本
- 管理承包合同
- 旅游服務(wù)行業(yè)行程變動(dòng)應(yīng)對(duì)合同
- 電子商務(wù)平臺(tái)建設(shè)與維護(hù)合同
- 攝影服務(wù)業(yè)-項(xiàng)目取消或延誤時(shí)合同終止條款
- 二零二四年度人民幣個(gè)人信用消費(fèi)貸款合同3篇
- 二零二四年度三人教育咨詢(xún)合伙協(xié)議書(shū)合同范本3篇
- 二零二四年度企業(yè)合同管理流程再造與風(fēng)險(xiǎn)防控合同3篇
- 執(zhí)業(yè)醫(yī)師資格考試《臨床執(zhí)業(yè)醫(yī)師》 考前 押題試卷絕密1 答案
- 2024年執(zhí)業(yè)藥師繼續(xù)教育專(zhuān)業(yè)答案
- 社會(huì)保險(xiǎn)課件教學(xué)課件
- 訂婚協(xié)議書(shū)手寫(xiě)模板攻略
- 宇航用商業(yè)現(xiàn)貨(COTS)器件保證指南-編制說(shuō)明
- 2024年安全員-C證考試題庫(kù)及答案(1000題)
- 《立體倉(cāng)庫(kù)鋼結(jié)構(gòu)貨架技術(shù)規(guī)范(征求意見(jiàn)稿)》
- 2024年貴州蔬菜集團(tuán)有限公司招聘筆試參考題庫(kù)附帶答案詳解
- 2024江蘇省四校聯(lián)考高三下學(xué)期開(kāi)學(xué)考化學(xué)試題及答案
- 《玩手機(jī)的危害》課件
- 《社區(qū)康復(fù)》課件-第二章 社區(qū)康復(fù)的內(nèi)容
評(píng)論
0/150
提交評(píng)論