SQL授予用户权限的语句_第1页
SQL授予用户权限的语句_第2页
SQL授予用户权限的语句_第3页
SQL授予用户权限的语句_第4页
SQL授予用户权限的语句_第5页
已阅读5页,还剩18页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

..>插入多行数据的语法格式为:INSERTINTOtable_or_view[(column_list)]子查询例3-7求出各位学生的平均成绩,把结果存放在新表AVGSCORE中。程序清单如下:/*首先建立新表AVGSCORE,用来存放**和学生的平均成绩。*/CREATETABLEAVGSCORE(SNOCHAR(10),AVGSCORESMALLINT)Go/*利用子查询求出SC表中各位学生的平均成绩,把结果存放在新表AVGSCORE中。*/INSERTINTOAVGSCORESELECTSNO,AVG(SCORE)FROMSCGROUPBYSNO例3-12创立把讲授C5课程的教师的工资增加100元。程序清单如下:/*T表〔教师根本情况表〕的构造为T(TNO,TN,SE*,AGE,PROF,SAL,DEPT)分别表示教师的,,性别,年龄,职称,工资,系别。TC表〔教师授课表〕的构造为TC(TNO,CNO)分别表示教师的,课程。*/UPDATETSETSAL=SAL+100WHERETNOIN(SELECTT.TNOFROMT,TCWHERET.TNO=TC.TNOANDTC.CNO='C5')/*通过连接查询找到讲授C5课程的教师。*/下面是删除一行记录的例子。例3-14删除张益琳教师的记录。程序清单如下:DELETEFROMTWHERETN=’张益琳’例3-16删除李明同学选课的记录。DELETEFROMSCWHERESNO=(SELECTSNOFROMSWHERESN=’李明’)三、数据控制语言数据控制语言〔DCL〕是用来设置或更改数据库用户或角色权限的语句,包括GRANT,DENY,REVOKE等语句。在默认状态下,只有sysadmin,dbcreator,db_owner或db_securityadmin等人员才有权力执行数据控制语言。语句权限与角色的授予SQL语言使用GRANT语句为用户授予语句权限的语法格式为:GRANT<语句权限>|<角色>[,<语句权限>|<角色>]…TO<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…[WITHADMINOPTION]其语义为:将指定的语句权限授予指定的用户或角色。其中:〔1〕PULBIC代表数据库中的全部用户;〔2〕WITHADMINOPTION为可选项,指定后则允许被授权的用户将指定的系统特权或角色再授予其他用户或角色。例3-17给用户Mary和John以及WindowsNT组Corporate\BobJ授予多个语句权限。程序清单如下:GRANTCREATEDATABASE,CREATETABLETOMary,John,[Corporate\BobJ]例3-18为用户ZhangYiLin授予CREATETABLE的语句权限。程序清单如下:GRANTCREATETABLETOZhangYiLin同语句权限的授予类似,SQL语言使用GRANT语句为用户授予对象权限,其语法格式为:GRANTALL|<对象权限>[(列名[,列名]…)][,<对象权限>]…ON<对象名>TO<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…[WITHADMINOPTION]其语义为:将指定的操作对象的对象权限授予指定的用户或角色。其中:〔1〕ALL代表所有的对象权限。〔2〕列名用于指定要授权的数据库对象的一列或多列。如果不指定列名,被授权的用户将在数据库对象的所有列上均拥有指定的特权。实际上,只有当授予INSERT、UPDATE权限时才需指定列名。〔3〕ON子句用于指定要授予对象权限的数据库对象名,可以是根本表名、视图名等。〔4〕WITHADMINOPTION为可选项,指定后则允许被授权的用户将权限再授予其他用户或角色。例3-19在权限层次中授予对象权限。首先,给所有用户授予SELECT权限,然后,将特定的权限授予用户Mary,John和Tom。程序清单如下:GRANTSELECTONsTOpublicGOGRANTINSERT,UPDATE,DELETEONsTOMary,John,TomGO例3-20将查询T表和修改教师职称的权限授予USER3,并允许将此权限授予其他用户。程序清单如下:GRANTSELECT,UPDATE(PROF)ONTTOUSER3WITHADMINOPTION上例中,USER3具有此对象权限,并可使用GRANT命令给其他用户授权,如下例,USER3将此权限授予USER4:GRANTSELECT,UPDATE(PROF)ONTTOUSER4数据库管理员可以使用REVOKE语句收回语句权限,其语法格式为:REVOKE<语句权限>|<角色>[,<语句权限>|<角色>]…FROM<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…例:收回用户ZHANGYILIN所拥有的CREATETABLE的语句权限。REVOKECREATETABLEFROMZHANGYILIN所有授予出去的权力在必要时都可以由数据库管理员和授权者收回,收回对象权限仍然使用REVOKE语句,其语法格式为:REVOKE<对象权限>|<角色>[,<对象权限>|<角色>]…FROM<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…例3-21收回用户USER1对C表的查询权限。程序清单如下:REVOKESELECTONCFROMUSER1例3-22收回用户USER3查询T表和修改教师职称的权限。程序清单如下:REVOKESELECT,UPDATE(PROF)ONTFROMUSER3在上例中,USER3将对T表的权限授予了USER4,在收回USER3对T表的权限的同时,系统会自动收回USER4对T表的权限。例3-23首先从public角色中收回SELECT权限,然后,收回用户Mary,John和Tom的特定权限。程序清单如下:USEpubsGOREVOKESELECTONsFROMpublicGOREVOKEINSERT,UPDATE,DELETEONsFROMMary,John,TomDENY语句用于拒绝给当前数据库内的用户或者角色授予权限,并防止用户或角色通过其组或角色成员继承权限。否认语句权限的语法形式为:DENYALL|<语句权限>|<角色>[,<语句权限>|<角色>]…TO<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…否认对象权限的语法形式为:DENYALL|<对象权限>[(列名[,列名]…)][,<对象权限>]…ON<对象名>TO<用户名>|<角色>|PUBLIC[,<用户名>|<角色>]…例3-24首先给public角色授予SELECT权限,然后,拒绝用户Mary,John和Tom的特定权限。程序清单如下:USEpubsGOGRANTSELECTONsTOpublicGODENYSELECT,INSERT,UPDATE,DELETEONsTOMary,John,Tom四、系统存储过程系统存储过程的局部例如如下:sp_addtype:用于定义一个用户定义数据类型;sp_configure:用于管理效劳器配置选项设置;*p_sendmail:用于发送电子邮件或寻呼信息;sp_stored_procedures:用于返回当前数据库中的存储过程的清单;sp_help:用于显示参数清单和其数据类型;sp_depends:用于显示存储过程依据的对象或者依据存储过程的对象;sp_helpte*t:用于显示存储过程的定义文本;sp_rename:用于修改当前数据库中用户对象的名称。五、变量变量是一种语言中必不可少的组成局部。Transact-SQL语言中有两种形式的变量,一种是用户自己定义的局部变量,另外一种是系统提供的全局变量。1.局部变量局部变量是一个能够拥有特定数据类型的对象,它的作用范围仅限制在程序内部。局部变量被引用时要在其名称前加上标志"〞,而且必须先用DECLARE命令定义后才可以使用。定义局部变量的语法形式如下:DECLAER{local_variabledata_type}[…n]其中,参数local_variable用于指定局部变量的名称,变量名必须以符号开头,并且局部变量名必须符合SQLServer的命名规则。参数data_type用于设置局部变量的数据类型及其大小。data_type可以是任何由系统提供的或用户定义的数据类型。但是,局部变量不能是te*t,nte*t或image数据类型。使用DECLARE命令声明并创立局部变量之后,会将其初始值设为NULL,如果想要设定局部变量的值,必须使用SELECT命令或者SET命令。其语法形式为:SET{local_variable=e*pression}或者SELECT{local_variable=e*pression}[,...n]其中,参数local_variable是给其赋值并声明的局部变量,参数e*pression是任何有效的SQLServer表达式。例3-26创立一个myvar变量,然后将一个字符串值放在变量中,最后输出myvar变量的值。程序清单如下:DECLAREmyvarchar(20)selectmyvar='Thisisatest'SELECTmyvarGO例3-27通过查询给变量赋值。程序清单如下:USEadventureworksGODECLARErowsintSETrows=(SELECTCOUNT(*)FROMhumanresources.employee)2.全局变量除了局部变量之外,SQLServer系统本身还提供了一些全局变量。全局变量是SQLServer系统内部使用的变量,其作用范围并不仅仅局限于*一程序,而是任何程序均可以随时调用。全局变量通常存储一些SQLServer的配置设定值和统计数据。用户可以在程序中用全局变量来测试系统的设定值或者是Transact-SQL命令执行后的状态值。在使用全局变量时应该注意以下几点:〔1〕全局变量不是由用户的程序定义的,它们是在效劳器级定义的。〔2〕用户只能使用预先定义的全局变量。〔3〕引用全局变量时,必须以标记符"〞开头。〔4〕局部变量的名称不能与全局变量的名称一样,否则会在应用程序中出现不可预测的结果。例3-29显示到当前日期和时间为止试图登录SQLServer的次数。程序清单如下:SELECTGETDATE()AS'当前的时期和时间',CONNECTIONSAS'试图登录的次数'六、运算符运算符是一些符号,它们能够用来执行算术运算、字符串连接、赋值以及在字段、常量和变量之间进展比较。在SQLServer2005中,运算符主要有以下六大类:算术运算符、赋值运算符、位运算符、比较运算符、逻辑运算符和字符串串联运算符。1.算术运算符算术运算符可以在两个表达式上执行数学运算,这两个表达式可以是数字数据类型分类的任何数据类型。算术运算符包括加〔+〕、减〔-〕、乘〔*〕、除〔/〕和取模〔%〕。2.赋值运算符Transact-SQL中只有一个赋值运算符,即〔=〕。赋值运算符使我们能够将数据值指派给特定的对象。另外,还可以使用赋值运算符在列标题和为列定义值的表达式之间建立关系。3.位运算符使我们能够在整型数据或者二进制数据〔image数据类型除外〕之间执行位操作。此外,在位运算符左右两侧的操作数不能同时是二进制数据。表3-1列出了所有的位运算符及其含义。运算符含义&〔按位AND〕按位AND〔两个操作数〕|〔按位OR〕按位OR〔两个操作数〕^〔按位互斥OR〕按位互斥OR〔两个操作数〕4.比较运算符比较运算符亦称为关系运算符,用于比较两个表达式的大小或是否一样,其比较的结果是布尔值,即TRUE〔表示表达式的结果为真〕、FALSE〔表示表达式的结果为假〕以及UNKNOWN。除了te*t,nte*t或image数据类型的表达式外,比较运算符可以用于所有的表达式。5.逻辑运算符逻辑运算符可以把多个逻辑表达式连接起来。逻辑运算符包括AND、OR和NOT等运算符。逻辑运算符和比较运算符一样,返回带有TRUE或FALSE值的布尔数据类型。三个运算符的优先级别为:NOT,AND,OR。6.字符串串联运算符字符串串联运算符允许通过加号〔+〕进展字符串串联,这个加号即被称为字符串串联运算符。例如对于语句SELECT’abc’+’def’,其结果为abcdef。在SQLServer2005中,运算符的优先等级从高到低如下所示,如果优先等级一样,则按照从左到右的顺序进展运算。〔1〕括号:〔〕;〔2〕乘、除、求模运算符:*,/,%;〔3〕加减运算符:+,-;〔4〕比较运算符:=,>,<,>=,<=,<>,!=,!>,!<;〔5〕位运算符:^,&,|;〔6〕逻辑运算符:NOT;〔7〕逻辑运算符:AND;〔8〕逻辑运算符:OR。七、函数在Transact-SQL语言中,函数被用来执行一些特殊的运算以支持SQLServer的标准命令。SQLServer包含多种不同的函数用以完成各种工作,每一个函数都有一个名称,在名称之后有一对小括号,如:gettime()。大局部的函数在小括号中需要一个或者多个参数。Transact-SQL编程语言提供了四种函数:行集函数、聚合函数、Ranking函数、标量函数。1.行集函数行集函数可以在Transact-SQL语句中当作表引用。例3-33通过行集函数OPENQUERY()执行一个分布式查询,以便从效劳器local中提取表department中的记录。程序清单如下:select*fromopenquery(local,’select*fromdepartment’)2.聚合函数聚合函数用于对一组值进展计算并返回一个单一的值。除COUNT函数之外,聚合函数忽略空值。聚合函数经常与SELECT语句的GROUPBY子句一同使用。仅在以下项中聚合函数允许作为表达式使用:SELECT语句的选择列表〔子查询或外部查询〕;COMPUTE或COMPUTEBY子句;HAVING子句。计算AdventureWorksCycles的副总所用的平均休假小时数以及总的病假小时数。对检索到的所有行,每个聚合函数都生成一个单独的汇总值。程序清单如下。USEAdventureWorks;GOSELECTAVG(VacationHours)as'Averagevacationhours',SUM(SickLeaveHours)as'Totalsickleavehours'FROMHumanResources.EmployeeWHERETitleLIKE'VicePresident%'Ranking函数为查询结果数据集分区中的每一行返回一个序列值。依据此函数,一些行可能取得和其他行一样的序列值。Transact-SQL提供以下一些Ranking函数:RANK;DENSE_RANK;NTILE;ROW_NUMBER。表3-4标量函数的分类函数分类解释配置函数返回当前的配置信息游标函数返回有关游标的信息日期和时间函数对日期和时间输入值进展处理数学函数对作为函数参数提供的输入值执行计算元数据函数返回有关数据库和数据库对象的信息平安函数返回有关用户和角色的信息字符串函数对字符串〔char或varchar〕输入值执行操作系统函数执行操作并返回有关SQLServer中的值、对象和设置的信息系统统计函数返回系统的统计信息文本和图像函数对文本或图像输入值或列执行操作,返回有关这些值的信息〔1〕字符串函数字符串函数可以对二进制数据、字符串和表达式执行不同的运算,大多数字符串函数只能用于char和varchar数据类型以及明确转换成char和varchar的数据类型,少数几个字符串函数也可以用于binary和varbinary数据类型。字符串函数可以分为以下几大类:根本字符串函数:UPPER,LOWER,SPACE,REPLICATE,STUFF,REVERSE,LTRIM,RTRIM。字符串查找函数:CHARINDE*,PATINDE*。长度和分析函数:DATALENGTH,SUBSTRING,RIGHT。转换函数:ASCH,CHAR,STR,SOUNDE*,DIFFERENCE。例3-38使用LTRIM函数删除字符变量中的起始空格。程序清单如下:DECLAREstring_to_trimvarchar(60)SETstring_to_trim='Fivespacesareatthebeginningofthisstring.'SELECT'Hereisthestringwithouttheleadingspaces:'+LTRIM(string_to_trim)例3-39使用可选的start_location参数从addressline1列的第2个字符开场查找"shoe〞程序清单如下。USEadventureworksSELECTCHARINDE*('shoe',addressline1,2)FROMperson.addressWHEREaddressid='5'〔2〕日期和时间函数函数参数功能DATEADD〔datepart,number,date〕以datepart指定的方式,返回date加上number之和DATEDIFF〔datepart,date1,date2〕以datepart指定的方式,返回date2与date1之差DATENAME〔datepart,date〕返回日期date中datepart指定局部所对应的字符串DATEPART〔datepart,date〕返回日期date中datepart指定局部所对应的整数值DAY〔date〕返回指定日期的天数GETDATE〔〕返回当前的日期和时间MONTH〔date〕返回指定日期的月份数YEAR〔date〕返回指定日期的年份数例3-42显示在humanresources.employee表中雇用日期到当前日期间的天数。程序清单如下。USEadventureworksSELECTDATEDIFF(day,hiredate,getdate())ASdiffdaysFROMhumanresources.employee例3-43从GETDATE函数返回的日期中提取月份名。程序清单如下:SELECTDATENAME(month,getdate())AS'MonthName'数学函数数学函数用于对数字表达式进展数学运算并返回运算结果。数学函数可以对SQLServer提供的数字数据〔decimal、integer、float、real、money、smallmoney、smallint和tinyint〕进展处理。例3-45在同一表达式中使用CEILING(),FLOOR(),ROUND()函数。程序清单如下:selectceiling(13.4),floor(13.4),round(13.4567,3)系统函数系统函数用于返回有关SQLServer系统、用户、数据库和数据库对象的信息。系统函数可以让用户在得到信息后,使用条件语句,根据返回的信息进展不同的操作。与其他函数一样,可以在SELECT语句的SELECT和WHERE子句以及表达式中使用系统函数。转换函数有两个:CONVERT和CAST。CAST函数允许把一个数据类型强制转换为另一种数据类型,其语法形式为:CAST(e*pressionASdata_type)CONVERT函数允许用户把表达式从一种数据类型转换成另一种数据类型,还允许把日期转换成不同的样式,其语法形式为:CONVERT(data_type[(length)],e*pression[,style])例3-46例如检索列表价格的第一位是3的产品的名称,并将ListPrice转换为int。程序清单如下。USEAdventureWorksGOSELECTSUBSTRING(Name,1,30)ASProductName,ListPriceFROMProduction.ProductWHERECAST(ListPriceASint)LIKE'3%'GO例3-47用style参数将当前日期转换为不同格式的字符串。程序清单如下:SELECT'101'=CONVERT(char,GETDATE(),101),'1'=CONVERT(char,GETDATE(),1),'112'=CONVERT(char,GETDATE(),112)例3-48从adventureworks数据库中返回表的首列名称程序清单如下。USEadventureworksSELECTCOL_NAME(OBJECT_ID('person.contact'),1)例3-49检查sysdatabases中的每一个数据库,使用数据库标识号来确定数据库名称。程序清单如下:USEmasterSELECTdbid,DB_NAME(dbid)ASDB_NAMEFROMsysdatabasesORDERBYdbid7.WAITFOR语句WAITFOR语句用于暂时停顿执行SQL语句、语句块或者存储过程等,直到所设定的时间已过或者所设定的时间已到才继续执行。WAITFOR语句的语法形式为:WAITFOR{DELAY'time'|TIME'time'}其中,DELAY用于指定时间间隔,TIME用于指定*一时刻,其数据类型为datetime,格式为‘hh:mm:ss’。例3-58使用WAITFORTIME语句,以便在晚上10:20执行存储过程update_all_stats。程序清单如下:BEGINWAITFORTIME'22:20'E*ECUTEupdate_all_statsEND8.RETURN语句RETURN语句用于无条件地终止一个查询、存储过程或者批处理,此时位于RETURN语句之后的程序将不会被执行。RETURN语句的语法形式为:RETURN[integer_e*pression]其中,参数integer_e*pression为返回的整型值。存储过程可以给调用过程或应用程序返回整型值。例3-59显示如果在执行findjobs时没有给出用户名作为参数,RETURN则将一条消息发送到用户的屏幕上然后从过程中退出。如果给出用户名,将从适当的系统表中检索由该用户在当前数据库内创立的所有对象名。程序清单如下:CREATEPROCEDUREfindjobsnmsysname=NULLASIFnmISNULLBEGINPRINT'Youmustgiveausername'RETURNENDELSEBEGINFROMsysobjectsoINNERJOINmaster..sysloginslWHERE=nmEND/*例3-1创立数据库表。*//*程序清单如下:*//*下面的例子将创立表S。*/CREATETABLES(snochar(10)NOTNULL/***字段*/CONSTRAINTPK_snoPRIMARYKEYCLUSTERED/*主键约束*/CHECK(snolike'31300501[0-9][0-9]')/*检查约束*/,snamechar(8)NULL,/*姓名字段*/se*char(2)NULL,/*性别字段*/ageintNULL,/*年龄字段*/deptvarchar(20)NULL/*系别字段*/)/*例3-2修改S表,增加一个班号列。*//*程序清单如下:*/ALTERTABLESADDCLASS_NOCHAR(6)/*例3-3删除S表。*//*程序清单如下:*/DROPtableS/*再执行例3-1*//*例3-4在S表中插入一条学生记录〔**:S7;:郑冬;性别:女;年龄:21;系别:计算机〕。*//*程序清单如下:*/INSERTINTOSVALUES('3130050107','郑冬','女',21,'计算机')/*例3-5创立SC表〔学生选课表〕,并向SC表中插入一条选课记录〔’S7’,’C1’〕。*//*程序清单如下:*/CREATETABLESC(snochar(10)NOTNULL,ochar(2)NULL,/*课程字段*/scorenumeric(4,1)NULL/*成绩字段*/)GoINSERTINTOSC(sno,cno)VALUES('3130050101','c1')Go/*例3-6使用column_list及VALUES列表显式地指定将被插入每个列的值。*//*程序清单如下:*/CREATETABLET1(column_1int,column_2varchar(30))GoINSERTT1(column_2,column_1)VALUES('Thisisatest',1)/*例3-7求出各位学生的平均成绩,把结果存放在新表AVGSCORE中。程序清单如下:*//*首先建立新表AVGSCORE,用来存放**和学生的平均成绩。*/CREATETABLEAVGSCORE(SNOCHAR(10),AVGSCORESMALLINT)Go/*利用子查询求出SC表中各位学生的平均成绩,把结果存放在新表AVGSCORE中。*/INSERTINTOAVGSCORESELECTSNO,AVG(SCORE)FROMSCGROUPBYSNO/*例3-8一个带有WHERE条件的修改语句。*//*程序清单如下:*/useadventureworksgoupdateperson.addresssetcity='Boston'whereaddressid=1/*例3-9将所有学生年龄增加1岁*//*程序清单如下:*/UPDATESSETAGE=AGE+1/*例3-10下面的例如修改SalesPerson表中的SalesYTD列,以反映SalesOrderHeader表中记录的最近销售情况。*//*程序清单如下:*/USEAdventureWorks;GOUPDATESales.SalesPersonSETSalesYTD=SalesYTD+SubTotalFROMSales.SalesPersonASspJOINSales.SalesOrderHeaderASsoANDso.OrderDate=(SELECTMA*(OrderDate)FROMSales.SalesOrderHeaderWHERESalesPersonID=sp.SalesPersonID)/*例3-11将UPDATE语句与TOP子句一起使用,更新Employee表中10个随机行的VacationHours列,使之变成原来的倍。*//*程序清单如下:*/USEAdventureWorks;GO/*例3-12创立T表〔教师根本情况表〕的构造为T(TNO,TN,SE*,AGE,PROF,SAL,DEPT)分别表示教师的,,性别,年龄,职称,工资,系别。TC表〔教师授课表〕的构造为TC(TNO,CNO)分别表示教师的,课程。*/USEe*ampleGOCREATETABLEt( TNOchar(10)NOTNULL CONSTRAINTPK_TNOPRIMARYKEY,/*教师字段*/ TNchar(10)NULL,/*教师姓名字段*/ SE*char(2)NULL,/*教师性别字段*/ AGEintNULL,/*教师年龄字段*/ PROFchar(20)NULL,/*教师职称字段*/ SALintNULL,/*教师工资字段*/ DEPTchar(10)NULL,/*教师所在系别字段*/)GOINSERTINTOtVALUES('0001','张教师','男',41,'副教授',2200,'电力系')GOINSERTINTOtVALUES('0002','张益琳','女',32,'讲师',1500,'动力系')GOCREATETABLETC( TNOchar(10)NOTNULL,/*教师字段*/ CNOchar(10)NULL,/*教师执教课程字段*/)GOINSERTINTOtcVALUES('0001','C5')GO/*把讲授C5课程的教师的工资增加100元。*//*程序清单如下:*/UPDATETSETSAL=SAL+100WHERETNOIN(SELECTT.TNOFROMT,TCWHERET.TNO=TC.TNOANDTC.CNO='C5')/*通过连接查询找到讲授C5课程的教师。*//*例3-13把所有教师的工资提高到平均工资的倍*//*程序清单如下:*/UPDATETSETSAL=(SELECT1.2*AVG(SAL)FROMT)/*例3-14删除张益琳教师的记录。*//*程序清单如下:*/DELETEFROMTWHERETN='张益琳'/*例3-15删除所有教师的授课记录。*//*程序清单如下:*/DELETEFROMTC/*例3-16删除李明同学选课的记录。*/DELETEFROMSCWHERESNO=(SELECTSNOFROMSWHEREsname='李明')/*例3-17给用户Mary授予多个语句权限。*//*程序清单如下:*/GRANTCREATEDATABASE,CREATETABLETOMary/*例3-18为用户ZhangYiLin授予CREATETABLE的语句权限。*//*程序清单如下:*/GRANTCREATETABLETOZhangYiLin/*例3-19在权限层次中授予对象权限。首先,给所有用户授予SELECT权限,然后,将特定的权限授予用户Mary、John和Tom*//*程序清单如下:*/GRANTSELECTONs/*需先创立s表*/TOpublicGOGRANTINSERT,UPDATE,DELETEONsTOMary,John,Tom/*需首先创立用户Mary,John,Tom*/GO/*例3-20将查询T表和修改教师职称的权限授予USER3,并允许将此权限授予其他用户。*//*程序清单如下:*/GRANTSELECT,UPDATEONTTOuser3WITHgrantOPTION/*上例中,USER3具有此对象权限,并可使用GRANT命令给其他用户授权,如下例,USER3将此权限授予USER4:*/GRANTSELECT,UPDATE(PROF)ONTTOUSER4/*例3-21收回用户USER1对jobs表的查询权限。*//*程序清单如下:*/REVOKESELECTONjobsFROMmary/*例3-22收回用户mary查询T表和修改教师职称的权限。*//*程序清单如下:*/REVOKESELECT,UPDATE(PROF)ONTFROMmary/*例3-23首先从public角色中收回SELECT权限,然后,收回用户Mary,Jhon和Tom的特定权限。*//*程序清单如下:*/REVOKESELECTONsFROMpublicGOREVOKEINSERT,UPDATE,DELETEONsFROMMary,John,Tom/*例3-24首先给public角色授予SELECT权限,然后拒绝用户Mary、John和Tom的特定权限*//*程序清单如下:*/GRANTSELECTONsTOpublicGODENYSELECT,INSERT,UPDATE,DELETEONsTOMary,John,Tom/*例3-25使用两种注释类型的例子。*//*程序清单如下:*/USEAdventureWorksGO--Firstlineofamultiple-linecomment.--Secondlineofamultiple-linecomment.GO/*注释语句的第一行.注释语句的第二行.*/GO--在Transact-SQL语言调试过程中使用注释语句。SELECTtitle,/*birthdate,*/hiredate--在代码后面加上注释。USEAdventureWorksGOSETunitprice=unitprice*.9--降低价格以提高市场份额。GO/*例3-26创立一个myvar变量,然后将一个字符串值放在变量中,最后输出myvar变量的值。*//*程序清单如下:*/DECLAREmyvarchar(20)selectmyvar='Thisisatest'SELECTmyvarGO/*例3-27通过查询给变量赋值。*//*程序清单如下:*/USEadventureworksGODECLARErowsintSETrows=(SELECTCOUNT(*)FROMhumanresources.employee)/*例3-28在SELECT语句中使用由SET赋值的局部变量。*//*程序清单如下:*/USEadventureworksGODECLAREphonechar(12)SETphone='398-555-0132'SELECTRTRIM(firstname)+''+RTRIM(lastname)ASName,phoneWHEREphone=phoneGO/*例3-29显示到当前日期和时间为止试图登录SQLServer的次数。*//*程序清单如下:*/SELECTGETDATE()AS'当前的时期和时间',CONNECTIONSAS'试图登录的次数'/*例3-31创立一个具有int数据类型的表以显示值,并将该表放入一行中。*//*程序清单如下:*/CREATETABLEt1(aintNOTNULL,bintNOTNULL)INSERTt1VALUES(170,75)/*下面的查询在a列和b列上执行按位AND运算。*/SELECTa&bFROMt1/*例3-32在SET语句使用的表达式中,括号使其首先执行加法,表达式的结果为18。*//*程序清单如下:*/DECLAREMyNumberintSETMyNumber=2*(4+5)SELECTMyNumber/*例3-33通过行集函数OPENQUERY()执行一个分布式查询,以便从效劳器local中提取表department中的记录。*//*程序清单如下:*/select*fromopenquery(SERVER,'select*fromNorthwind.customers')/*例3-34计算AdventureWorksCycles的副总所用的平均休假小时数以及总的病假小时数。对检索到的所有行,每个聚合函数都生成一个单独的汇总值。*//*程序清单如下:*/USEAdventureWorks;GOSELECTAVG(VacationHours)as'Averagevacationhours',SUM(SickLeaveHours)as'Totalsickleavehours'WHERETitleLIKE'VicePresident%'/*例3-35以下语句返回产品的平均标价。如果不使用DISTINCT,AVG函数将计算出表中所有产品的平均价格*//*程序清单如下:*/USEAdventureWorks;GOSELECTAVG(DISTINCTListPrice)/*例3-36下面的例如查找居住在不同城市的人员数量*//*程序清单如下:*/USEadventureworksGOSELECTCOUNT(DISTINCTcity)GO/*例3-37返回表中本钱最高的产品以及价格的标准偏差。*//*程序清单如下:*/USEadventureworksGOSELECTMA*(standardcost),STDEV(listprice)/*例3-38使用LTRIM函数删除字符变量中的起始空格。*//*程序清单如下:*/DECLAREstring_to_trimvarchar(60)SETstring_to_trim='Fivespacesareatthebeginningofthisstring.'SELECT'Hereisthestringwithouttheleadingspaces:'+LTRIM(string_to_trim)/*例3-39使用可选的start_location参数从addressline1列的第2个字符开场查找"shoe〞*//*程序清单如下:*/USEadventureworksWHEREaddressid='5'/*例3-40显示如何只返回字符串的一局部。该查询在一列中返回表中的姓氏,在另一列中返回表中的名字首字母。*//*程序清单如下:*/USEadventureworksSELECTlastname,SUBSTRING(firstname,1,1)ORDERBYlastname/*例3-41在第一个字符串〔abcdef〕中删除从第二个位置〔字符b〕开场的三个字符,然后在删除的起始位置插入第二个字符串,创立并返回一个字符串。*//*程序清单如下:*/SELECTSTUFF('abcdef',2,3,'ijklmn')/*例3-42显示在humanresources.employee表中雇用日期到当前日期间的天数。*//*程序清单如下:*/USEadventureworksSELECTDATEDIFF(day,hiredate,getdate())ASdiffdays/*例3-43从GETDATE函数返回的日期中提取月份名。*//*程序清单如下:*/SELECTDATENAME(month,getdate())AS'MonthName'/*例3-44此例如输出AdventureWorks数据库中订单的时间范围的列表。此时间范围为当前订单日期加上21天。*//*程序清单如下:*/USEAdventureWorks;GOSELECTDATEADD(day,21,OrderDate)ASTimeFrameGO/*例3-45在同一表达式中使用CEILING(),FLOOR(),ROUND()函数。*//*程序清单如下:*/selectceiling(13.4),floor(13.4),round(13.4567,3)/*例3-46例如检索列表价格的第一位是3的产品的名称,并将ListPrice转换为int。*//*程序清单如下:*/USEAdventureWorksGOSELECTSUBSTRING(Name,1,30)ASProductName,ListPriceWHERECAST(ListPriceASint)LIKE'3%'GO/*例3-47用style参数将当前日期转换为不同格式的字符串。*//*程序清单如下:*/SELECT'101'=CONVERT(char,GETDATE(),101),'1'=CONVERT(char,GETDATE(),1),'112'=CONVERT(char,GETDATE(),112)/*例3-48从adventureworks数据库中返回表的首列名称*//*程序清单如下:*/USEadventureworksSELECTCOL_NAME(OBJECT_ID('person.contact'),1)/*例3-49检查sysdatabases中的每一个数据库,使用数据库标识号来确定数据库名称。*//*程序清单如下:*/SELECTdbid,DB_NAME(dbid)ASDB_NAMEFROMsysdatabasesORDERBYdbid/*例3-50查找所有产品的平均价格,用值替换表listprice列中所有NULL条目*//*程序清单如下:*/USEadventureworksSELECTAVG(ISNULL(listprice,$10.00))/*例3-51显示带有语句块的IF条件。如果产品的平均价格不低于$15,则就显示文本:Averagepriceismorethan$15*//*程序清单如下:*/USEadventureworksIF(SELECTAVG(listprice)FROMductWHEREcolor='blue')<$15BEGINPRINT'Thefollowingproductaree*cellent:'PRINT''SELECTSUBSTRING(name,1,15)ASnameWHEREcolor='blue'ENDELSEPRINT'Averagepriceismorethan$15.'/*例3-52利用BEGIN和END语句使得IF语句在取值为FALSE时跳过语句块。*//*程序清单如下:*/DECLAREErrorSaveVariablecharIF(ERROR<>0)BEGINSETErrorSaveVariable=ERRORPRINT'Errorencountered,'+CAST(ErrorSaveVariableASVARCHAR(10))END/*例3-53用Go语句作为批的完毕语句。*//*程序清单如下:*/USEadventureworksGODECLAREMyMsgVARCHAR(50)SELECTMyMsg='Hello,World.'GO/*--MyMsg在Go语句后失效。*//*例3-54使用CASE函数去更改产品的分类显示,以使其更易于理解*//*程序清单如下:*/USEadventureworksSELECTCategory=CASEcolorWHEN'red'THEN'redcolor'WHEN'black'THEN'blackcolor'WHEN'silver'THEN'silvercolor'WHEN'yellow'THEN'yellowcolor'WHEN'blue'THEN'bluecolor'END,CAST(nameASvarchar(25))AS'Shortenedname',listpriceASPriceWHERElistpriceISNOTNULLORDERBYcolor,priceCOMPUTEAVG(listprice)BYcolor/*例3-55使用搜索CASE函数,根据产品的价格范围将价格显示为文本注释*//*程序清单如下:*/USEadventureworksSELECT'PriceCategory'=CASEWHENlistpriceISNULLTHEN'Notyetpriced'WHENlistprice<10THEN'VeryReasonableTitle'WHENlistprice>=10andlistprice<20THEN'CoffeeTableTitle'ELSE'E*pensive!'END,CAST(nameASvarchar(20))AS'Shortenedname'ORDERBYlistpriceGO/*例3-56在嵌套的IF...ELSE和WHILE中使用BREAK和CONTINUE。如果平均价格少于$30,WHILE循环就将价格加倍,然后选择最高价。如果最高价少于或等于$50,WHILE循环重新启动并再次将价格加倍。该循环不断地将价格加倍直到最高价格超过$50,然后退出WHILE循环并打印一条消息。*//*程序清单如下:*/USEadventureworksWHILE(SELECTAVG(listprice)FROMduct)<$30BEGINSETlistprice=listprice*2IF(SELECTMA*(listprice)FROMduct)>$50BREAKELSECONTINUEENDPRINT'Toomuchforthemarkettobear'/*例3-57利用GOTO语句求出从1加到5的总和。*//*程序清单如下:*/declaresumint,countintselectsum=0,count=1label_1:selectsum=sum+countselectcount=count+1ifcount<=5gotolabel_1selectcount,sum/*例3-58使用WAITFORTIME语句,以便在晚上10:20执行存储过程update_all_stats。*//*程序清单如下:*/BEGINWAITFORTIME'22:20'E*ECUTEupdate_all_statsEND/*例3-59显示如果在执行findjobs时没有给出用户名作为参数,RETURN则将一条消息发送到用户的屏幕上然后从过程中退出。如果给出用户名,将从适当的系统表中检索由该用户在当前数据库内创立的所有对象名。*//*程序清单如下:*/CREATEPROCEDUREfindjobsnmsysname=NULLASIFnmISNULLBEGINPRINT'Youmustgiveausername'RETURNENDELSEBEGINFROMsysobjectsoINNERJOINmaster..sysloginslWHERE=nmEND/*例4-1创立了一个Test数据库,该数据库的主数据文件逻辑名称为Test_data,物理文件名为,初始大小为10MB,最大尺寸为无限大,增长速度为10%;数据库的日志文件逻辑名称为Test_log,物理文件名为,初始大小为1MB,最大尺寸为5MB,增长速度为1MB。*//*程序清单如下:*/CREATEDATABASEtestONPRIMARY(NAME='test',FILENAME='C:\ProgramFiles\MicrosoftSQLServer\MSSQL.1\MSSQL\data\test.mdf',SIZE=10240KB,MA*SIZE=UNLIMITED,FILEGROWTH=10%)LOGON(NAME='test_log',FILENAME='C:\Pr

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论