还剩51页未读,继续阅读
本资源只提供10页预览,全部文档请下载后查看!喜欢就下载吧,查找使用更方便
文本内容:
TOC\o1-3\h\z\u1批处理22变量33逻辑控制5
(4)函数
74.1系统函数7(
4.2)自定义函数135高级查询236存储过程357游标368触发器50SQLServer数据库的高级操作1批处理2变量3逻辑控制4函数5高级查询*/1批处理将多条SQL语句作为一个整体去编译,生成一个执行计划,然后,执行!理解批处理的关键在于编译,对于由多条语句组成的一个批处理,如果在编译时,其中,有一条出现语法错误,将会导致编译失败!createtabletaintbint--注释--如果多行注释中包含了批处理的标识符go--在编译的过程中代码将会被go分割成多个部分来分批编译--多行注释的标记将会被分隔而导致编译出错--以下几条语句是三个非常经典的批处理--你猜一下会添加几条记录!/*insertintotvalues11go*/insertintotvalues22go/*insertintotvalues33*/go--查询看添加了几条记录select*fromttruncatetablet2变量--全局变量SQLServer中全局变量由系统定义、系统维护,用户一般仅可对其进行读取!--查看SQLServer版本print@@version--服务器名称print@@servername--系统错误编号insertintotvaluesaaprint@@errorinsertintotvaluesaaif@@error=245 printError--SQLServer版本的语言信息print@@LANGUAGE--一周的第一天从星期几算起print@@datefirst--CPU执行命令所耗费时间的累加print@@cpu_busy--获取最近添加的标识列的值createtablettaintidentity310bintinsertintottbvalues1print@@identityselect*fromtt--局部变量局部变量由用户定义,仅可在同一个批处理中调用和访问declare@intAgetinyintset@intAge=12print@intAgedeclare@strNamevarchar12select@strName=stateprint@strNameselectau_lname@strNamefromauthors3逻辑控制--IF条件判断declare@iintset@i=12if@i10 begin --{ printDadadada! printDadadada! end --}else begin printXiaoXiao! printXiaoXiao! end--While循环控制declare@iint;set@i=12;print@ireturn;while@i18begin print@i; set@i=@i+1; if@i17 continue; if@i15 break;end;--CASE分支判断selectau_lnamestate犹他州fromauthorswherestate=UTselectau_lnamestate密西西比州fromauthorswherestate=MIselectau_lnamestate肯塔基州fromauthorswherestate=KSselectau_lnamestate casestate whenUTthen犹他州 whenMIthen密西西比州 whenKSthen肯塔基州 whenCAthen加利福利亚 elsestate endfromauthors
(4)函数
4.1系统函数--获取指定字符串中左起第一个字符的ASC码printasciiABCDEF--根据给定的ASC码获取相应的字符printchar65--获取给定字符串的长度printlenabcdef--大小写转换printlowerABCDEFprintupperabcdef--去空格printltrim abcd dfd df printrtrim abcd dfd df --求绝对值printabs-12--幂--3的2次方printpower32printpower33--随机数--0-1000之间的随机数printrand*1000--获取圆周率printpi--获取系统时间printgetdate--获取3天前的时间printdateaddday-3getdate--获取3天后的时间printdateaddday3getdate--获取3年前的时间printdateaddyear-3getdate--获取3年后的时间printdateaddyear3getdate--获取3月后的时间printdateaddmonth3getdate--获取9小时后的时间printdateaddhour9getdate--获取9分钟后的时间printdateaddminute9getdate--获取指定时间之间相隔多少年printdatediffyear2005-01-012008-01-01--获取指定时间之间相隔多少月printdatediffmonth2005-01-012008-01-01--获取指定时间之间相隔多少天printdatediffday2005-01-012008-01-01--字符串合并printabc+defprintabcderprintabc+456printabc+456--类型转换printabc+convertvarchar10456selecttitle_idtypepri__fromtitles--字符串连接必须保证类型一致以下语句执行将会出错--类型转换selecttitle_id+type+pri__fromtitles--正确selecttitle_id+type+convertvarchar10pri__fromtitlesprint123+convertvarchar3123print123+123printconvertvarchar122005-09-01110--获取指定时间的特定部分printyeargetdateprintmonthgetdateprintdaygetdate--获取指定时间的特定部分printdatepartyeargetdateprintdatepartmonthgetdateprintdatepartdaygetdateprintdateparthhgetdateprintdatepartmigetdateprintdatepartssgetdateprintdatepartmsgetdate--获取指定时间的间隔部分--返回跨两个指定日期的日期和时间边界数printdatediffyear2001-01-012008-08-08printdatediffmonth2001-01-012008-08-08printdatediffday2001-01-012008-08-08printdatediffhour2001-01-012008-08-08printdatediffmi2001-01-012008-08-08printdatediffss2001-01-012008-08-08--在向指定日期加上一段时间的基础上,返回新的datetime值printdateaddyear5getdateprintdateaddmonth5getdateprintdateaddday5getdateprintdateaddhour5getdateprintdateaddmi5getdateprintdateaddss5getdate--其他printhost_idprinthost_nameprintdb_idpubsprintdb_name5--利用系统函数作为默认值约束droptabletttcreatetabletttstu_name varchar12stu_birthday datetimedefaultgetdatealtertabletttaddconstraintdf_ttt_stu_birthdaydefault getdateforstu_birthdayinsertintotttvaluesANiu2005-04-01insertintotttvaluesANiugetdateinsertintotttvaluesAZhudefaultsp_helptttselect*fromttt (
4.2)自定义函数selecttitle_idfromtitleswheretype=businessselectstufftitle_id13ABBtypefromtitleswheretype=businessselectcounttitle_idfromtitleswheretype=businessselecttitle_idfromtitleswheretype=businessselect *countdbo.titleauthor.title_idFROMdbo.authorsINNERJOINdbo.titleauthorONdbo.authors.au_id=dbo.titleauthor.au_idselectau_idcounttitle_idfromtitleauthorgroupbyau_idSELECTdbo.authors.au_idCOUNTdbo.titleauthor.title_idAS作品数量FROMdbo.authors leftouterJOIN dbo.titleauthorONdbo.authors.au_id=dbo.titleauthor.au_idGROUPBYdbo.authors.au_idorderby作品数量--自定义函数的引子(通过这个子查询来引入函数的作用)--子查询--统计每个__的作品数--将父查询中的__编号传入子查询--作为查询条件利用聚合函数count统计其作品数量selectau_lname selectcounttitle_id fromtitleauthorasta whereta.au_id=a.au_id asTitleCountfromauthorsasaorderbyTitleCount --是否可以定义一个函数--将__编号作为参数统计其作品数量并将其返回selectau_idau_lnamedbo.GetTitleCountByAuIDau_idasTitleCountfromauthorsorderbyTitleCount--根据给定的__编号获取其相应的作品数量createfunctionGetTitleCountByAuID@au_idvarchar12returnsintbegin returnselectcounttitle_id fromtitleauthor whereau_id=@au_idend--利用函数来显示每个__的作品数量createprocpro_CalTitleCountasselectau_idau_lnamedbo.GetTitleCountByAuIDau_idasTitleCountfromauthorsorderbyTitleCountgo--执行存储过程executepro_CalTitleCount--vb中函数定义格式functionGetTitleCountByAuIDau_idasstringasinteger ....... GetTitleCountByAuID=endfunction--SALES作品销售信息select*fromsales--根据书籍编号查询其销售记录(其中,qty表示销量)select*fromsaleswheretitle_id=BU1032--根据书籍编号统计其总销售量(其中,qty表示销量)selectsumqtyfromsaleswheretitle_id=BU1032--利用分组语句(groupby),根据书籍编号统计每本书总销售量(其中,qty表示销量)selecttitle_idsumqtyfromsalesgroupbytitle_id--是否可以考虑定义一个函数根据书籍编号来计算其总销售量--然后,将其应用到任何一条包含了书籍编号的查询语句中selecttitle_idtitledbo.GetTotalSaleByTitleIDtitle_idasTotalSalesfromtitlesorderbyTotalSales--定义一个函数根据书籍编号来计算其总销售量createfunctionGetTotalSaleByTitleID@tidvarchar24returnsintbegin returnselectsumqtyfromsaleswheretitle_id=@tidend--统计书籍销量的前10位--其中,可以利用函数计算结果的别名作为排序子句的参照列selecttop10title_idtitledbo.GetTotalSaleByTitleIDtitle_idasTotalSalesfromtitlesorderbyTotalSalesdesc--根据书籍编号计算其销量排名createfunctionGetTheRankOfTitle@idvarchar20returnsintbegin returnselectcountTotalSales fromtitles whereToalSales selectTotalSales fromtitles wheretitle_id=@id__ilto:title_id=@idend--根据书籍编号计算其销量排名selectdbo.GetTheRankOfTitlepc1035fromtitlesselectcounttitle_id+1fromtitleswheredbo.GetTotalSaleByTitleIDtitle_iddbo.GetTotalSaleByTitleIDpc1035--删除函数dropfunctionGetRankByTitleId--根据书籍编号计算其销量排名createfunctionGetRankByTitleId@tidvarchar24returnsintbegin returnselectcounttitle_id+1 fromtitles wheredbo.GetTotalSaleByTitleIDtitle_iddbo.GetTotalSaleByTitleID@tidend--在查询语句中利用函数统计每本书的总销量和总排名selecttitle_idtitle dbo.GetTotalSaleByTitleIDtitle_idasTotalSales dbo.GetRankByTitleIdtitle_idasTotalRankfromtitlesorderbyTotalSalesdesc--查看表结构sp_helptitles--查看存储过程的定义内容sp_helptextGetRankByTitleIdsp_helptextsp_helptextsp_helptextxp_cmdshell--[ORDERDETAILS]订单详细信息select*from[orderdetails]select*from[orderdetails]whereproductid=23--根据产品编号在订单详细信息表中统计总销售量selectsumquantityfrom[orderdetails]whereproductid=23--构造一个函数根据产品编号在订单详细信息表中统计总销售量createfunctionGetTotalSaleByPID@Pidvarchar12returnsintbegin returnselectsumquantityfrom[orderdetails]whereproductid=@Pidendselect*fromproducts--在产品表中查询,统计每一样产品的总销量selectproductidproductnamedbo.GetTotalSaleByPIDproductidfromproducts--CREATEFUNCTIONLargeOrderShippers@FreightParmmoneyRETURNS@OrderShipperTabTABLE ShipperID int ShipperName nvarchar80 OrderID int ShippedDate datetime Freight money ASBEGIN INSERT@OrderShipperTab SELECTS.ShipperIDS.CompanyName O.OrderIDO.ShippedDateO.Freight FROMShippersASSINNERJOINOrdersASO ONS.ShipperID=O.ShipVia WHEREO.Freight@FreightParm RETURNENDSELECT*FROMLargeOrderShippers$500--根据__编号计算其所得版权费createfunctionfun_RoyalTyper@au_ididreturnsintasbegin declare@rtint select@rt=sumroyaltyperfromtitleauthorwhereau_id=@au_id return@rtendgoselecttop1au_lnameau_fnamedbo.fun_RoyalTyperau_idas版权费fromauthorsorderby dbo.fun_RoyalTyperau_iddescgocreatefunctionfun___xRoyalTyper_Au_idreturnsidasbegin declare@au_idid select@au_id=au_id fromauthors orderby dbo.fun_RoyalTyperau_id return@au_idendgoselectdbo.fun___xRoyalTyper_Au_idgoselectau_lnameau_fnamedbo.fun_RoyalTyperau_idas版权税 fromauthorswhereau_id=dbo.fun___xRoyalTyper_Au_idgo5高级查询 selecttitle_idpri__fromtitles--查找最高__select__xpri__fromtitles--查找最贵书籍的__排序,如果存在多本__最贵的书,此方法将会遗漏selecttop1title_idpri__fromtitlesorderbypri__desc--查找最贵书籍的__子查询selecttitle_idpri__fromtitleswherepri__=select__xpri__fromtitles--查询指定出版社出版的书连接selectp.pub_nameas出版社t.titleas书籍名称frompublishersaspjointitlesastonp.pub_id=t.pub_idwherepub_name=NewMoonBooks--查询指定出版社出版的书子查询selecttitlefromtitleswherepub_id=selectpub_id frompublishers wherepub_name= NewMoonBooks--查询指定出版社出版的书分开查询selecttitlefromtitleswherepub_id=0736selectpub_idfrompublisherswherepub_name= NewMoonBooks--重点--理解相关子查询的基础--select*fromtitleswheretype=businessselect*fromtitleswheretype=business123select*fromtitleswhere1=1--在订单表中寻找满足以下条件的订单编号以及相应的客户编号--在详细订单表中存在对应的订单编号并且其中包含产品编号为23的产品--然后将产品编号为23的产品订购量返回判断是否大于20USEnorthwindSELECTorderidcustomeridFROMordersASor1WHERE20SELECTquantityFROM[orderdetails]ASod WHEREor
1.orderid=od.orderid AND od.productid=23GOSELECTau_lnameau_fnameFROMauthorsWHERE100IN SELECTroyaltyperFROMtitleauthor WHEREtitleauthor.au_ID=authors.au_id selectauthors.au_lnameauthors.au_fnamefromauthorsjoin titleauthorontitleauthor.au_ID=authors.au_idwheretitleauthor.royaltyper=100USEpubsSELECTau_lnameau_fnameFROMauthorsWHEREau_idIN SELECTau_id FROMtitleauthor WHEREtitle_idIN SELECTtitle_id FROMtitles WHEREtype=popular_comp selectdistinctt.typea.au_lnamea.au_fnamefromauthorsasajointitleauthorastaona.au_id=ta.au_id jointitlesastonta.title_id=t.title_idwheret.type=business--查找类型为business或是trad_cook类型的书籍select*fromtitleswheretype=businessselect*fromtitleswheretype=trad_cook--查找类型为business或是trad_cook类型的书籍Orselect*fromtitleswheretype=businessortype=trad_cook--查找类型为business或是trad_cook类型的书籍Inselect*fromtitleswheretypeinbusinesstrad_cook--查找来自KS或是UT的__selectau_lnamestatefromauthorswherestate=KSselectau_lnamestatefromauthorswherestate=UT--查找来自KS或是UT的__Orselectau_lnamestatefromauthorswherestate=UTorstate=KS--查找来自KS或是UT的__Inselectau_lnamestatefromauthorswherestateinUTKSselectau_lnamestatefromauthorswherestatenotinUTKS--查找出版了类型为business类型的书籍的出版社SELECTpub_idFROMtitlesWHEREtype=businessSELECTpub_idpub_nameFROMpublishersWHEREpub_idIN13__0736--查找出版了类型为business类型的书籍的出版社In和子查询SELECTpub_idpub_nameFROMpublishersWHEREpub_idIN SELECTpub_id FROMtitles WHEREtype=business SELECTtitleadvan__FROMtitlesWHEREadvan__ SELECT__Xadvan__ FROMpublishersINNERJOINtitlesON titles.pub_id=publishers.pub_id WHEREpub_name=AlgodataInfosystems SELECTtitleadvan__FROMtitlesWHEREadvan__all SELECTadvan__ FROMpublishersINNERJOINtitlesON titles.pub_id=publishers.pub_id WHEREpub_name=AlgodataInfosystems andadvan__isnotnull declare@iintset@i=12if@inull printDDDDDelse printXXXXX SELECTadvan__ FROMpublishersINNERJOINtitlesON titles.pub_id=publishers.pub_id WHEREpub_name=AlgodataInfosystems selecttitle_idpri__fromtitleswherepri__allselectpri__fromtitleswheretype=businessselecttitle_idpri__fromtitleswherepri__select__xpri__fromtitleswheretype=businessselecttitle_idpri__fromtitleswherepri__anyselectpri__fromtitleswheretype=businessselecttitle_idpri__fromtitleswherepri__selectminpri__fromtitleswheretype=businessselectpri__fromtitleswheretype=businessifexistsselect*fromtitleswheretype=123 printZZZZZelse printBBBBBifexistsselect*fromauthorswherecity=Berkeleyandstate=UT printWelcomeelse printBye-Bye--筛选出business以及trad_cook类型的书籍联合查询selecttitle_idtypefromtitleswheretype=businessunionselecttitle_idtypefromtitleswheretype=trad_cook--统计business类型的书籍的总价联合查询selecttitlepri__fromtitleswheretype=businessunionselect合计:sumpri__fromtitleswheretype=business--统计所有书籍的类型剔除重复Distinctselectdistincttypefromtitles--__记录的__SelectIntoselect*intoaufromauthorsselect*fromau--查看数据表结构SelectInto并没有对数据表的约束进行__sp_helpauthorssp_helpau--分页子查询的经典应用之一--Jobs职务信息表(pubs数据库)--在实际项目中,显示职务信息时,而职务信息量非常庞大,可能需要将其分为若干个页面来显示--比如每页显示4条记录,那么,第一页将显示1,2,3,4,第二页将显示5,6,7,8--显示所有信息SELECT*FROMjobs--显示前4信息selecttop4*fromjobs--显示前8信息selecttop8*fromjobs--显示前12信息selecttop12*fromjobs--寻找规律,每一页的信息源于前(页面大小*页码)条信息的反序结果的前页面大小条记录--比如第二页就是前8条记录的反序结果的前4条selecttop4*fromselecttop8*fromjobsasttorderbyjob_iddesc--当然,对于期望按升序显示查询结果的要求可以对查询结果进行再次排序select*fromselecttop4*fromselecttop8*fromjobsasttorderbyjob_iddescassttorderbyjob_id--SQL命令中不支持在select的查询列表中直接使用局部变量--比如selecttop@PageSize*fromjobs--那么,可以考虑对sql命令进行拼装,然后,利用系统存储过程sp_executesql来执行execsp_executesqlNSelect*fromjobs--存储过程的实现--其中,@CurrentPageSize用于确定最后一页的页面大小createprocproGetJob__yPage@CurrentPageSizeint@PageSizeint@CurrentPageintasDeclare@strSqlnvarchar400set@strSql=select*from selecttop+convertnvarchar4@CurrentPageSize+* fromselecttop+convertnvarchar4@PageSize*@CurrentPage+*fromjobsastt orderbyjob_iddescasstt orderbyjob_idexecsp_executesql@strSqlgo--测试execproGetJob__yPage244 6存储过程--扩展存储过程--查询系统目录下文件信息xp_cmdshelldir*.*--启动Windows系统服务xp_cmdshellnetstartiisadmin 7游标--游标的五个基本操作步骤--声明declarecur_titlescursorforselecttitlepri__fromtitles--打开opencur_titles--提取fetchcur_titlesfetchnextfromcur_titles--关闭closecur_titles--释放deallocatecur_titles --利用游标遍历所有书籍信息,通过冒泡排序法进行比较,找出最高__的书--这一段为批处理版--与批处理版相比,存储过程版更方便调试以及代码的重用--声明declarecur_titlescursorforselecttitlepri__fromtitles--打开opencur_titlesdeclare@titlevarchar80declare@pri__numeric94declare@title_tempvarchar80declare@pri___tempnumeric94--提取fetchcur_titlesinto@title@pri__fetchcur_titlesinto@title_temp@pri___tempwhile@@fetch_status=0begin if@pri__@pri___temp begin set@pri__=@pri___temp set@title=@title_temp end fetchcur_titlesinto@title_temp@pri___tempend--关闭closecur_titles--释放deallocatecur_titles--显示处理结果print最贵的书是:+@title+ +__是:+convertvarchar12@pri__go--定义一个存储过程--利用游标遍历所有书籍信息,通过冒泡排序法进行比较,找出最高__的书(游标具体应用的经典)--这段存储过程的实现代码相对下面的实现方式略有不同--代码重复,但是思路更清晰createpro__durepro_Get__xTitleas --声明 declarecur_titlescursor forselecttitlepri__fromtitles --打开 opencur_titles --存储最贵的书籍信息 declare@titlevarchar80 declare@pri__numeric94 --存储从游标中提取出来的书籍的信息 declare@title_tempvarchar80 declare@pri___tempnumeric94 --提取 fetchcur_titlesinto@title@pri__ --判断是否存在书籍信息 if@@fetch_status0 begin print没有书籍信息! --关闭 closecur_titles --释放 deallocatecur_titles --结束存储过程 return end fetchcur_titlesinto@title_temp@pri___temp --判断是否只存在一本书 if@@fetch_status0 begin --显示处理结果 print最贵的书是:+@title+ +__是:+convertvarchar12@pri__ --关闭 closecur_titles --释放 deallocatecur_titles --结束存储过程 return end while@@fetch_status=0 begin if@pri__@pri___temp begin set@pri__=@pri___temp set@title=@title_temp end fetchcur_titlesinto@title_temp@pri___temp end --显示处理结果 print最贵的书是:+@title+ +__是:+convertvarchar12@pri__ --关闭 closecur_titles --释放 deallocatecur_titles go--定义一个存储过程--利用游标遍历所有书籍信息,通过冒泡排序法进行比较,找出最高__的书--相对上面的实现方式,以下实现方式更简洁createpro__durepro_Get__xTitleas --声明 declarecur_titlescursor forselecttitlepri__fromtitles --打开 opencur_titles --存储最贵的书籍信息 declare@titlevarchar80 declare@pri__numeric94 --存储从游标中提取出来的书籍的信息 declare@title_tempvarchar80 declare@pri___tempnumeric94 --提取 fetchcur_titlesinto@title@pri__ --判断是否存在书籍信息 if@@fetch_status=0 begin print没有书籍信息! gotoerrNoTitles end fetchcur_titlesinto@title_temp@pri___temp --判断是否只存在一本书 if@@fetch_status=0 begin gotoerrOnlyOne end while@@fetch_status=0 begin if@pri__@pri___temp begin set@pri__=@pri___temp set@title=@title_temp end fetchcur_titlesinto@title_temp@pri___temp end errOnlyOne: --显示处理结果 print最贵的书是:+@title+ +__是:+convertvarchar12@pri__ errNoTitles: --关闭 closecur_titles --释放 deallocatecur_titles go --根据__编号查看其相应的作品年销售量--低于5000提示:销售量太低--高于5000提示:销售量太高createpro__durepro_sales___g@au_ididasifexistsselectau_idfromauthorswhereau_id=@au_idbegin declareTempSalescursor for selecttitleytd_sales fromtitleauthortajointitlest onta.title_id=t.title_id whereau_id=@au_id openTempSales declare@tvarchar80 declare@yint fetchTempSales into@t@y while@@fetch_status=0 begin if5000@y print@t++convertvarchar5@y+销售量太低 else print@t++convertvarchar5@y+销售量太高 fetchTempSales into@t@y end closeTempSales deallocateTempSalesendelse print__编号无效!goexecpro_sales___g213-46-__15 /*示例A.使用简单游标和语法打开该游标时所生成的结果集包括pubs数据库的authors表中的所有行和列可以更新该游标,对该游标所做的所有更新和删除均在提取中表现出来因为没指定SCROLL选项,FETCHNEXT是唯一可用的提取选项*/DECLAREauthors_cursorCURSORFORSELECT*FROMauthorsOPENauthors_cursorFETCHNEXTFROMauthors_cursor/*B.使用嵌套游标生成报表输出下例显示如何嵌套游标以生成复杂的报表为每个__声明内部游标*/SETNOCOUNTONDECLARE@au_idvarchar11@au_fnamevarchar20@au_lnamevarchar40 @messagevarchar80@titlevarchar80PRINT--------UtahAuthorsreport--------DECLAREauthors_cursorCURSORFORSELECTau_idau_fnameau_lnameFROMauthorsWHEREstate=UTORDERBYau_idOPENauthors_cursorFETCHNEXTFROMauthors_cursorINTO@au_id@au_fname@au_lnameWHILE@@FETCH_STATUS=0BEGIN PRINT SELECT@message=-----BooksbyAuthor:+ @au_fname++@au_lname PRINT@message --Declareaninnercursorbased --onau_idfromtheoutercursor. DECLAREtitles_cursorCURSORFOR SELECTt.title FROMtitleauthortatitlest WHEREta.title_id=t.title_idAND ta.au_id=@au_id --Variablevaluefromtheoutercursor OPENtitles_cursor FETCHNEXTFROMtitles_cursorINTO@title IF@@FETCH_STATUS0 PRINT NoBooks WHILE@@FETCH_STATUS=0 BEGIN SELECT@message= +@title PRINT@message FETCHNEXTFROMtitles_cursorINTO@title END CLOSEtitles_cursor DEALLOCATEtitles_cursor --Getthenextauthor. FETCHNEXTFROMauthors_cursor INTO@au_id@au_fname@au_lnameENDCLOSEauthors_cursorDEALLOCATEauthors_cursorGO--------UtahAuthorsreport-------- -----BooksbyAuthor:AnneRinger TheGourmetMicrow__e IsAngertheEnemy -----BooksbyAuthor:AlbertRinger IsAngertheEnemy LifeWithoutFear 8触发器 --设定数据库的递归触发器alterdatabasepubs setrecursive_triggersongo--创建数据表,并设定主键、外键以及缺省约束createtableemp_mgrEmpchar30pri__rykeyMgrchar30nullforeignkeyreferen__semp_mgrEmpNoOfReportsintdefault0go--创建插入触发器createtriggeremp___rinsonemp_mgrforinsertasdeclare@echar30@mchar30declarecur_mgrcursorfor selectemp_mgr.emp fromemp_mgrinserted whereemp_mgr.emp=inserted.mgropen cur_mgrfetchnextfromcur_mgrinto@ewhile@@fetch_status=0begin updateemp_mgr setemp_mgr.NoOfReports=emp_mgr.NoOfReports+1 whereemp_mgr.emp=@e fetchnextfromcur_mgrinto@eendclosecur_mgrdeallocatecur_mgrgo--查看数据表相关触发器sp_helptriggeremp_mgrgocreatetriggeremp_mgrupdonemp_mgrforupdateasifupdatemgrbegin updateemp_mgr setemp_mgr.NoOfReports=emp_mgr.NoofReports+1 frominserted whereemp_mgr.emp=inserted.mgr updateemp_mgr setemp_mgr.NoOfReports=emp_mgr.NoOfReports-1 fromdeleted whereemp_mgr.emp=deleted.mgrendgoinsertemp_mgrempmgrvaluesHarrynullinsertemp_mgrempmgrvaluesAli__Harryinsertemp_mgrempmgrvaluesPaulAli__insertemp_mgrempmgrvaluesJoeAli__insertemp_mgrempmgrvaluesD__eJoegoselect*fromemp_mgrgoupdateemp_mgrsetmgr=Harrywhereemp=D__egoselect*fromemp_mgrgo。