XV-1036_ -|五侯鲭├绥德步行街
淘宝减肥药排行榜十强
只推淘宝安全有效的减肥药

当前位置:XV-1036 > 减肥产品

XV-1036

时间:2020-07-11 00:58  编辑:三亚发布网

XV-1036

【例2.1】创建一个uname用户自定义数据类型,其基于的系统数据类型是变长为8的字符,不允许空。

USEmaster;

EXECsp_addtypeuname,'varchar(8)','NOTNULL';

【例2.2】删除用户定义数据类型uname。

USEmaster;

Execsp_droptype'uname'

【例3.2】 在命令行方式下使用CREATEDATABASE语句创建一个数据库。名字为NewSales,数据文件名为NewSales.Mdf,存储在E:\下,初始大小为4MB,最大为10MB,文件增量以1MB增长。事务文件为NewSales_Log.Ldf,存储在E盘下,初始大小为2MB,最大为5MB,文件增量以1MB增长。

(1)打开SQLServerManagementStudio,连接到数据库服务器。

(2)单击“新建查询”按钮,进入到命令行方式。

(3)输入以下SQL语句:

CREATEDATABASENewSales

ONPRIMARY

(NAME=NewSales,

FILENAME='E:\NewSales.Mdf',

SIZE=4MB,

MAXSIZE=10MB,

FILEGROWTH=1MB)

LOGON

(NAME=NewSales_Log,

FILENAME='E:\NewSales_Log.Ldf',

SIZE=2MB,

MAXSIZE=5MB,

FILEGROWTH=1MB)

GO

【例3.3】在命令行方式下使用CREATEDATABASE语句创建一个名字为StuInfo的数据库。该数据库中有一个主文件组和一个名为Client的用户自定义文件组。主文件组中包含有一个名为StuInfo的主数据文件,存储在E盘下,初始大小为3MB,最大为10MB,文件增量以1MB增长;日志文件名为StuInfo_Log.Ldf,存储在D盘下,初始大小为1MB,最大为5MB,文件增量以1MB增长;用户自定义文件组Client1中有3个名为Student、Course、Score的数据文件,这3个数据文件均存储在E盘下,初始大小为2MB,最大为10MB,文件增量以1MB增长。

(3)输入以下SQL语句:

CREATEDATABASEStuInfo

ONPRIMARY

(NAME=StuInfo,

FILENAME='E:\StuInfo.Mdf',

SIZE=3MB,

MAXSIZE=10MB,

FILEGROWTH=1MB

),

FILEGROUPClient

(NAME=Student,

FILENAME='E:\Student.Ndf',

SIZE=2MB,

MAXSIZE=10MB,

FILEGROWTH=1MB

),

(NAME=Course,

FILENAME='E:\Course.Ndf',

SIZE=2MB,

MAXSIZE=10MB,

FILEGROWTH=1MB

),

(NAME=Score,

FILENAME='E:\Score.Ndf',

SIZE=2MB,

MAXSIZE=10MB,

FILEGROWTH=1MB

)

LOGON

(NAME=StuInfo1_Log,

FILENAME='D:\StuInfo_Log.Ldf',

SIZE=1MB,

MAXSIZE=5MB,

FILEGROWTH=1MB

)

GO

【例3.7】使用命令行方式将NewSales数据库中的数据文件NewSales由原来的4MB扩充为8MB,日志文件NewSales_Log由原来的2MB扩充为4MB。

(3)输入以下SQL语句:

USEMASTER

GO

ALTERDATABASENewSales

MODIFYFILE

(NAME='NewSales',SIZE=8MB)

GO

ALTERDATABASENewSales

MODIFYFILE

(NAME='NewSales_Log',SIZE=4MB)

GO

【例3.8】使用命令方式在NewSales数据库中增加一个用户自定义文件组Client2,并在该文件组中增加数据文件Client2_Data,文件存储在E:\,初始大小为2MB,最大容量为10MB,文件增量以1MB增长;日记文件Client2_Log文件存储在D:\,初始大小为1MB,最大容量为5MB,文件增量以1MB增长。

(3)输入以下SQL语句:

USENewSales

GO

ALTERDATABASENewSales

ADDFILEGROUPClient2

GO

ALTERDATABASENewSales

ADDFILE

(

NAME=Client2_Data,

FILENAME='E:\Client2_Data.Ndf',

SIZE=2MB,

MAXSIZE=10MB,

FILEGROWTH=1MB

)

TOFILEGROUPClient2

GO

ALTERDATABASENewSales

ADDLOGFILE

(

NAME=Client2_log,

FILENAME='D:\Client2_log.Ldf',

SIZE=1MB,

MAXSIZE=5MB,

FILEGROWTH=1MB

)

GO

【例3.10】使用命令行方式将NewSales数据库设置为只读。

(3)输入以下SQL语句:

USENewSales

GO

SP_DBOPTION'NewSales','readonly','true'

GO

【例3.11】将NewSales数据库设置为单用户方式。

(3)输入以下SQL语句:

USENewSales

GO

SP_DBOPTION'NewSales','singleuser','true'

GO

【例3.12】将NewSales数据库名字修改为MySales。

(3)输入以下SQL语句:

SP_DBOPTION'NewSales','readonly','false'--去掉只读属性

SP_RENAMEDB'NewSales','MySales'--将NewSales数据库改名为MySales

【例3.13】使用命令行方式删除MySales数据库。

(3)输入以下SQL语句:

USEmaster

DROPDATABASEMySales

【例3.16】使用命令行方式分离数据库NewSales,分离后不进行更新统计。

(3)输入以下SQL语句:

EXECSP_DETACH_DB'NewSales','true'

【例3.17】使用命令行方式将例3.16中分离出来的数据库NewSales附加到另一台计算机。

在附加数据库前,将例3.16分离出来的数据库文件NewSales.Mdf、NewSales_Log.Ldf复制到另一台计算机的E:\。

(3)输入以下SQL语句:

EXECSP_ATTACH_DB'NewSales',’E:\’NewSales.Mdf

【例3.19】使用命令行方式在Sales数据库中创建Goods表。Goods表的结构如表3.2所示。

表3.2Goods表的结构

列名

数据类型

可否为空

说明

备注

商品编号

int

主键

商品名称

Varchar(20)

生产厂商

Varchar(30)

进货价

money

零售价

money

数量

int

进货时间

datetime

进货员工编号

Char(6)

外键

与employees关联

(1)打开SQLServerManagementStudio,连接到数据库服务器。

(3)输入以下SQL语句:

USESales

GO

--创建进货表Goods

CREATETABLEGoods

(商品编号IntNOTNULL,

商品名称Varchar(20)NOTNULL,

生产厂商Varchar(30)NOTNULL,

进货价MoneyNOTNULL,

零售价MoneyNOTNULL,

数量IntNOTNULL,

进货时间DateTimeNOTNULL,

进货员工编号Char(6)NOTNULL

)

GO

【例3.20】使用图形化工具在Sales数据库中为Employees表的“编号”列创建主键约束,以保证不会出现编号相同的员工。

(2)展开“数据库”节点,展开“Sales”数据库节点,展开“表”节点。

(3)右键单击Employees节点,在弹出的菜单中选择“修改”命令。

(4)右键单击“编号”单元格,在弹出的快捷菜单中选择“设置主键”命令,此时可看到“编号”这一列已经有了一个小钥匙标志,这就表明“编号”这一列已经标识为主键。

创建表后添加主键约束,使用的SQL语句是:

ALTERTABLE表名

ADDCONSTRAINT主键约束名PRIMARYKEY(列名)

【例3.21】使用SQL语句为Goods表的“商品编号”列创建主键约束,以保证不会出现编号相同的商品。

(3)输入以下SQL语句:

USESales

GO

ALTERTABLEGoods

ADDCONSTRAINTpk_GoodsNoPRIMARYKEY(商品编号)

GO

例3.22可以用如下的SQL语句实现:

ALTERTABLEGoods

ADDCONSTRAINTFK_Goods_EmployeesFOREIGNKEY(进货员工编号)

REFERENCESEmployees(编号)

例3.23可以用如下的SQL语句为Employees表的“姓名”列添加UNIQUE约束:

USESales

ALTERTABLEEmployees

ADDCONSTRAINTIX_EmployeesNameUNIQUE(姓名)

例3.24可以用如下的SQL语句为Employees表的“部门”列添加CHECK约束:

USESales

ALTERTABLEEmployees

ADDCONSTRAINTCK_EmployeesDep CHECK(部门='财务部'or部门='库存部'or部门='销售部'or部门='采购部')

例3.25可以用如下的SQL语句为Goods表的“进货时间”列添加默认值约束:

USESales

ALTERTABLEGoods

ADDCONSTRAINTDF_GoodsDateDEFAULT(GETDATE())FOR进货时间

【例3.26】使用命令行方式在Sales数据库中创建Sell表,同时进行约束的设置。Sell表的结构如表3.3所示。

表3.3Sell表的结构

列名

数据类型

可否为空

说明

备注

销售编号

int

主键

自动生成

商品编号

int

外键

与Goods表关联

数量

int

售出时间

datetime

售货员工编号

Char(6)

外键

与Employees关联

在查询窗口中输入如下的SQL语句并运行:

USESales

CREATETABLESell

(销售编号IntNOTNULLprimarykeyIDENTITY(1,1),

商品编号IntNOTNULLREFERENCESGoods(商品编号),

数量IntNOTNULL,

售出时间DateTimeNOTNULLdefault(getdate()),

售货员工编号Char(6)NOTNULL,

constraintFK_Sell_EmployeesFOREIGNKEY(售货员工编号)REFERENCESEmployees(编号)

)

【例3.27】使用命令行方式查看Sales数据库Employees表的约束。

(3)输入以下SQL语句:

USESales

GO

EXECSP_HELPCONSTRAINTEmployees

GO

【例3.28】在命令行方式下使用“禁用约束”使Sales数据库中Employees表的核查约束“CK_EmployeesDep”暂时失效。

在查询窗口输入以下SQL语句并运行:

USESales

GO

ALTERTABLEEmployees

NOCHECKCONSTRAINTCK_EmployeesDep

GO

【例3.29】在命令行方式下使用“启用约束”启用Sales数据库中Employees表的核查约束ck_Employees_性别,使Employees表的核查约束ck_Employees_性别有效。

在查询窗口输入以下SQL语句并运行:

USESales

GO

ALTERTABLEEmployees

CHECKCONSTRAINTCK_EmployeesDep

GO

【例3.31】使用命令行方式查看Sales数据库中Employees表的属性。

在查询窗口输入以下SQL语句并运行:

USESales

GO

EXECUTESP_HELPEmployees

GO

【例3.32】使用命令行方式给Sales数据库的Employees表增加一列,列名为“邮箱”,数据类型为VarChar(20)。

在查询窗口输入以下SQL语句并运行:

USESales

GO

ALTERTABLEemployees

ADD邮箱varchar(20)

【例3.33】使用命令行方式将Sales数据库中Employees表“邮箱”字段的数据类型及长度由VarChar(20)改变为Char(30)。

在查询窗口输入以下SQL语句并运行:

USESales

GO

ALTERTABLEEmployees

ALTER COLUMN 邮箱 VarChar(30)

【例3.34】使用命令行方式删除Sales数据库中Employees表中列名为“邮箱”的列。

在查询窗口输入以下SQL语句并运行:

USESales

GO

ALTERTABLEEmployees

DROP COLUMN 邮箱 

【例3.36】使用命令行方式将Sales数据库中MyEmployees表的名称改变为Employees。

在查询窗口输入以下SQL语句并运行:

USESales

GO

EXECUTESP_RENAME‘MyEmployees’,’Employees’

【例3.38】使用命令行方式删除Sales数据库中MyGoods表。

在查询窗口输入以下SQL语句并运行:

USESales

GO

DROPTABLEMyGoods

GO

【例3.40】在命令行方式下使用INSERT语句向表Employees插入一条记录。

在查询窗口输入以下SQL语句并运行:

USESales

GO

INSERTINTOEmployees(编号,姓名,性别)

VALUES('1304','李明',1)

GO

【例3.41】在命令行方式下使用INSERT语句将表Employees1中性别=1的记录插入表Employees(设表Employees1的结构与Employees完全相同)。

在查询窗口输入以下SQL语句并运行:

USESales

GO

INSERTINTOEmployees

SELECT*

FROMEmployees1

WHEREEmployees1.性别=1

GO

【例3.42】在命令行方式下使用SELECTINTO语句生成一张新表,新表的名称为“男员工表”,数据来自于Employees表中性别=1的编号,姓名,性别等字段。

在查询窗口输入以下SQL语句并运行:

USESales

GO

SELECT编号,姓名,性别

INTO男员工表

FROMEmployeesWHERE性别=1

GO

【例3.43】在命令行方式下使用UPDATE语句将表Employees中编号为“1304”记录的电话更改为0771*******。

在查询窗口输入以下SQL语句并运行:

USESales

GO

UPDATEEmployees

SET电话='0771*******'

WHERE编号='1304'

GO

【例3.44】在命令行方式下使用UPDAT语句将表Goods中李明2005年5月20日进货的商品零售价调整为九五折。

在查询窗口输入以下SQL语句并运行:

USESales

GO

UPDATEGoods

SETGoods.零售价=Goods.零售价*0.95

FROMGoods,Employees

WHEREGoods.进货时间='2005-05-20'ANDEmployees.姓名='李明'

ANDEmployees.编号=Goods.进货员工编号

GO

【例3.45】在命令行方式下使用DELETE语句删除表Sell中售出时间为1995年1月1日以前的记录。

在查询窗口输入以下SQL语句并运行:

USESales

GO

DELETESellwhere售出时间0PRINT'还有货'

ELSEPRINT'无库存,请尽快进货!'

【例7.14】本例演示逻辑运算符ALL的使用。查询单笔商品销售量高于王峰最高销售量的员工姓名、所销售的商品名称、售出时间及销售量。

USESales

GO

SELECT姓名,商品名称,售出时间,Sell.数量

FROMEmployeesJOINSellONEmployees.编号=Sell.售货员工编号JOINGoodsONGoods.商品编号=Sell.商品编号

WHERESell.数量>ALL(SELECTSell.数量

FROMEmployeesJOINSell

ONEmployees.编号=Sell.售货员工编号

JOINGoodsONGoods.商品编号=Sell.商品编号

WHERE姓名='王峰')

【例7.15】本例演示多个字符串的串联。

USESales

GO

SELECTRTRIM(姓名)+':'+SPACE(1)+电话AS姓名及电话

FROMEmployees

【例7.16】在WHILE循环中,包含两条语句,需要BEGIN…END语句将这两条语句封闭起来组成一个语句块。

[email protected]

[email protected]=0

[email protected]=30ANDsum(数量)=60THEN'优秀员工,凭多出的销量获取奖金'

ELSE'无销售记录'

END

FROMSellJOINEmployeesONEmployees.编号=Sell.售货员工编号

WHEREYEAR(售出时间)=2005ANDMONTH(售出时间)=1

GROUPBY售货员工编号,姓名

GO

【例7.20】在sales数据库中,删除编号是“1301”的员工信息。

USEsales

GO

BEGINTRY

DELETEFROMemployeesWHERE编号='1301'

ENDTRY

BEGINCATCH

PRINT'出错信息为:'+error_message

【例7.21】

(1)使用DELAY关键字指定在执行SELECT语句之前等待5秒。

USESales

GO

WAITFORDELAY'00:00:05'

SELECT商品名称,生产厂商,进货价

FROMGoods

WHERE进货时间>='2005-1-1'

GO

(2)使用TIME关键字指定在9时25分50秒执行SELECT语句。

USESales

GO

WAITFORTIME'9:25:50'

SELECT商品名称,生产厂商,进货价

FROMGoods

WHERE进货时间>='2005-1-1'

GO

【例7.22】本例是符合SQL-92标准的游标声明语句。声明一个游标,用于访问Sales数据库中的所有进货商品信息。

USESales

GO

--声明游标

DECLAREGoods_cursorCURSOR

FOR

SELECT*FROMGoods

FORREADONLY

【例7.23】声明一个全局滚动动态游标sales_cursor,它用于获取所有员工销售“9”号商品的信息,其中包括员工姓名、销售数量和售出时间3列。

USESales

GO

DECLAREsales_cursorCURSOR

GLOBALSCROLLDYNAMIC

FOR

SELECT姓名,数量,售出时间

FROMEmployeesJOINSellONEmployees.编号=Sell.售货员工编号

WHERE商品编号=9

【例7.24】将例7.22中声明的游标sales_cursor打开,输出这个游标中的记录行数。

OPENsales_cursor

[email protected]@CURSOR_ROWSAS'游标sales_cursor记录行数'

【例7.25】将例7.23中声明的游标打开,并使用该游标读取结果集中的所有记录。

--打开游标

OPENsales_cursor

--第一次读取,得到结果集的首行记录

FETCHNEXTFROMsales_cursor

--循环读取结果集中剩余的数据行

[email protected]@FETCH_STATUS=0

BEGIN

FETCHNEXTFROMsales_cursor

END

【例7.26】关闭和释放例7.22中声明的游标sales_cursor。

--关闭游标sales_cursor

CLOSEsales_cursor

--释放(删除)游标sales_cursor

DEALLOCATEsales_cursor

【例8.1】本例创建一个简单的无参数的存储过程:在Sales数据库中,创建存储过程proc_Employees,查询采购部的员工信息。

创建和执行存储过程的脚本内容如下:

USESales

GO

CREATEPROCproc_Employees

AS

SELECT*

FROMEmployees

WHERE部门='采购部'

GO

--执行存储过程

EXECproc_Employees

【例8.2】创建一个带有输入参数的存储过程proc_goods,查询指定员工所进商品信息。

创建和执行存储过程的脚本内容如下:

USESales

GO

CREATEPROCproc_goods

@员工编号char(6)='1001'

AS

SELECT商品编号,商品名称,生产厂商,进货价,零售价,数量,进货时间

FROMGoods

WHERE进货员工编号[email protected]员工编号

GO

--执行存储过程,查询1001号员工所进的商品的信息

[email protected]员工编号=default

--或

[email protected]员工编号='1001'

【例8.3】创建一个带有输入和输出参数的存储过程proc_GNO,查询指定厂商指定名称的商品所对应的商品编号。

USESales

GO

CREATEPROCproc_GNO

@商品名称varchar(20),@生产厂商varchar(30),

@商品编号intOUTPUT

AS

[email protected]商品编号=商品编号

FROMGoods

WHERE商品名称[email protected]商品名称AND生产厂商[email protected]生产厂商

GO

--执行存储过程,查询惠普公司打印机商品编号

[email protected]商品编号int

EXECproc_GNO'打印机','惠普公司',@商品编号OUTPUT

PRINT'该商品编号为:'+CAST(@商品编号ASchar(6))

【例8.4】创建带有参数和返回值的存储过程。在Sales数据库中创建存储过程ProcSumByGoods,查询指定厂商指定名称的商品在某年某月的总销售量。

USESales

GO

CREATEPROCProcSumByGoods

@goodnamevarchar(20),@corpvarchar(30),@yearint,@monthint,

@sumintOUTPUT

AS

--声明和初始化一个局部变量,用于保存系统函数@@ERROR的返回值

[email protected]

[email protected]=0

--统计指定厂商指定名称的商品在指定年份月份总的销售量

[email protected]=SUM(Sell.数量)

FROMSellJOINGoodsONSell.商品编号=Goods.商品编号

WHERE商品名称[email protected]生产厂商[email protected](售出时间)[email protected](售出时间)[email protected]

IF(@@ERROR0)

[email protected][email protected]@ERROR

[email protected]

GO

GO

--执行存储过程,查询HP公司2004年10月的打印机销售总量

[email protected],@sumint

[email protected]=ProcSumByGoods'打印机','HP公司',2004,10,@sumOUTPUT

PRINT'该存储过程执行结果如下:'

PRINT'返回值='+CAST(@retASchar(1))

PRINT'总销售量='+CAST(@sumASchar(4))

【例8.5】创建一个名为FindEmployee的存储过程,可以用它来找出Sales数据库的Employees表中员工编号为指定值(输入参数)的记录的“姓名”字段的名称,另外指定一个参数LineNum做为输出参数,且必须在存储过程中判断员工编号不能为空串,是的话要打印出出错信息,并返回错误值0,如果查询成功在输出变量LineNum中保留所影响的行数,然后返回值1。

USESales

GO

CREATEPROCFindEmployee

@LineNumintOUTPUT,

@EmployeeIDchar(6)

AS

IFLEN(@EmployeeID)=0

BEGIN

PRINT'请输入一个合法的员工编号!'

RETURN0

END

SELECT姓名

FromEmployeesWHERE编号[email protected]

[email protected][email protected]@ROWCOUNT

RETURN1

GO

--执行存储过程(查询结果以文本方式显示)

[email protected],@LineNumint

[email protected][email protected],'1002'

print'返回值='+CAST(@retASchar(1))

print'行数='+CAST(@LineNumASchar(4))

【例8.6】本例演示了存储过程的嵌套调用:创建存储过程proc_GoodsSell,嵌套调用存储过程proc_GNO,查询指定厂商指定名称商品的销售情况。

CREATEPROCproc_GoodsSell

@商品名称varchar(20),@指定厂商varchar(30)

AS

[email protected]商品编号int

[email protected]商品名称,@指定厂商,@商品编号OUTPUT

SELECT商品编号,数量AS销售数量,售出时间,售货员工编号

FROMSell

WHERE商品编号[email protected]商品编号

GO

--执行存储过程,查询HP公司打印机的销售情况

EXECproc_GoodsSell'打印机','HP公司'

【例8.7】本例是用EXECUTE语句执行字符串的示例。

USESales

GO

[email protected](40)

[email protected]='SELECT*FROMEmployeesORDERBY姓名'

EXEC(@sqlstr)

【例8.8】使用相关的系统存储过程查看Sales数据库中proc_GoodsSell存储过程的定义、相关性和参数。

USESales

GO

EXECsp_helptextproc_GoodsSell--查看存储过程的定义

EXECsp_dependsproc_GoodsSell--查看存储过程的相关性

EXECsp_helpproc_GoodsSell--查看存储过程的参数

【例8.9】将存储过程ProcSumByGoods重命名为proc_单月总销量。

EXECsp_renameProcSumByGoods,proc_单月总销量

【例8.10】修改例8.2中的存储过程,要求加密存储过程的定义文本,不指定参数的默认值,只查询指定员工所进商品的名称、生产厂商、进货价和数量信息。

USESales

GO

CREATEPROCproc_goods

@员工编号char(6)

WITHENCRYPTION

AS

SELECT商品名称,生产厂商,进货价,数量

FROMGoods

WHERE进货员工编号[email protected]员工编号

GO

【例8.11】删除例8.3和例8.6中创建的存储过程。

DROPPROCproc_GNO,proc_GoodsSell

【例9.1】创建一个简单的DML触发器,当有人试图更新Sales数据库的商品信息时,利用触发器产生提示信息。

--创建触发器

USESales

GO

CREATETRIGGERtri_UpdateGoods

ONGoods

FORUPDATE

AS

RAISERROR('更新表数据',16,10)

GO

--测试触发器

UPDATEGoods

SET数量=8

WHERE商品编号=5

结果如下:

服务器:消息50000,级别16,状态10,过程tri_UpdateGoods,行5

更新表数据

【例9.2】创建一个AFTERINSERT触发器,当在Sales数据库的employees表中插入一条新员工记录时,如果不是“采购部”、“财务部”、“销售部”或“库存部”的员工,则撤销该插入操作,并返回出错消息。

USESales

GO

CREATETRIGGERtri_InsertEmp

ONEmployees

FORINSERT

AS

[email protected](16)

[email protected]=Employees.部门

FROMEmployees,inserted

WHEREEmployees.编号=inserted.编号

[email protected]('采购部','财务部','销售部','库存部')

begin

rollbacktransaction

--返回用户定义的错误信息并设系统标志,记录发生错误

raiserror('不能插入非本公司设定部门的员工信息!',16,10)

end

GO

--测试insert触发器

INSERTEmployees(编号,姓名,性别,部门,电话,地址)

VALUES('1501','彭真',1,'人事部','3988563','北京市南京路756号')

【例9.3】在Sales数据库的employees表和Sell表之间具有逻辑上的主外键关系,要求当删除或更新单个员工记录的时候,要激发触发器tri_Delete,在Sell表中也删除或更新相对应的记录行。

USESales

GO

CREATETRIGGERtri_Update_Delete

ONEmployees

FORUPDATE,DELETE

AS

SETNOCOUNTOFF--不返回结果

[email protected]

[email protected](6)

--更新

IFUPDATE(编号)

BEGIN

UPDATESell

SET售货员工编号=(SELECT编号FROMinserted)

WHERE售货员工编号in(SELECT编号FROMdeleted)

END

--删除

[email protected]=COUNT(*)FROMdeleted

[email protected]>0

BEGIN

--从临时表deleted中获取要删除的售货员工编号

[email protected]对不起,您不能删除该数据库中的视图!'

ROLLBACK

GO

【例9.5】创建一个DDL触发器,以保护当前服务器中的所有数据库不能被删除。

CREATETRIGGERnot_drop_database

ONALLSERVER

FORDROP_DATABASE

AS

PRINT'对不起,您不能删除当前服务器中的数据库!'

ROLLBACK

GO

【例9.6】查看Sales数据库中employees表的触发器类型。

USESales

GO

EXECsp_helptrigger'employees'

EXECsp_helptrigger'employees','DELETE'

【例9.7】查看例9.3中创建的触发器tri_Update_Delete的定义文本。

EXECsp_helptext'tri_Update_Delete'

【例9.8】查看例9.3中创建的触发器tri_Update_Delete的所有者和创建日期。

EXECsp_help'tri_Update_Delete'

【例9.9】修改触发器tri_UpdateGoods,加密触发器文本定义。

USESales

GO

ALTERTRIGGERtri_UpdateGoods

ONGoods

WITHENCRYPTION

FORUPDATE

AS

RAISERROR('更新表数据',16,10)

GO

【例9.10】修改触发器tri_UpdateGoods的名称,更名为“triUpdGood”。

EXECsp_rename'tri_UpdateGoods','triUpdGood'

【例9.11】禁止触发器tri_Update_Delete的使用。

ALTERTABLEemployees

DISABLETRIGGERtri_Update_Delete

/*测试,看tri_Update_Delete触发器禁用后删除一个员工记录还有没有使得触发器触发执行*/

DELETEemployees

WHERE编号='1301'

【例9.12】删除触发器triUpdGood和tri_Update_Delete

DROPTRIGGERtriUpdGood,tri_Update_Delete

【例10.2】使用命令行方式在Sales数据库创建名为Fn_Total的自定义函数,用于统计Sell表在某一时间段内的销售情况。

(1)定义函数。

①打开SQLServerManagementStudio,连接到数据库服务器。

②单击“新建查询”按钮,进入到命令行方式。

③输入以下代码:

USESales

GO

CREATEFUNCTIONFn_Total

(@btDateTime,@etDateTime)

RETURNSTABLE

AS

RETURN

(SELECTGoods.商品名称,Sell.数量

FROMGoods,Sell

WHERE(Sell.售出时间>[email protected]售出时间[email protected])

RETURN

END

【例10.4】在命令行方式下使用DROPFUNCTION语句删除【例10.3】在Sales数据库中创建的名为Fn_Lan的自定义函数。

在查询窗口输入以下SQL语句并运行:

USESales

GO

DROPFUNCTIONFn_Lan

GO

【例10.5】使用命令行方式定义一个事务,向表Sell插入3条记录,最后提交该事务。

(1)定义事务。在查询窗口输入以下SQL语句并运行:

USESales

GO

--事务开始

BEGINTRANSACTION

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(20,18,2,'2005-5-20','000008')

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(30,18,2,'2005-5-20','000008')

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(40,18,2,'2005-5-20','000008')

--提交事务

COMMITTRANSACTION

SELECT*FROMSellWHERE销售员工编号='000008'

【例10.6】使用命令行方式定义一个事务,向表Sell插入3条记录,最后回滚该事务。在查询窗口输入以下SQL语句并运行:

USESales

GO

--事务开始

BEGINTRANSACTION

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(13,18,2,'2005-5-20','000009')

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(14,12,5,'2005-5-20','000009')

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(15,16,3,'2005-5-20','000009')

--回滚事务

ROLLBACKTRANSACTION

SELECT*FROMSellWHERE销售员工编号='000009'

【例10.7】使用命令行方式定义一个事务,向表Sell插入1条记录后设置一个保存点,然后再向表Sell插入3条记录,最后将事务回滚到该保存点。在查询窗口输入以下SQL语句并运行:

USESales

GO

--事务开始

BEGINTRANSACTION

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(16,18,2,'2005-5-20','000019')

SAVETRANSACTIONs1

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(17,12,5,'2005-5-20','000019')

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(18,16,3,'2005-5-20','000019')

INSERTSell(销售编号,商品编号,数量,售出时间,销售员工编号)

VALUES(19,16,3,'2005-5-20','000019')

--回滚事务到保存点s1

ROLLBACKTRANSACTIONs1

(2)验证结果。在查询窗口输入以下SQL语句并运行:

SELECT*FROMSellWHERE销售员工编号='000019'

【例10.8】在命令行方式下,使用系统存储过程SP_LOCK查看当前持有锁的信息。

在查询窗口输入以下SQL语句并运行:

USEMASTER

GO

EXECSP_LOCK

GO

【例11.4】要删除一个使用SQLServer身份验证的登录账户“whb”的SQL语句为:

EXECUTEsp_droploginwhb

【例11.5】要删除一个使用Windows身份验证的登录账户“work1\jyb”的SQL语句为:

EXECUTEsp_revokelogin'work1\jyb'

【例11.7】将登录账户“whb”添加到sales数据库,使其成为数据库用户“whb”,然后将“whb”添加到sales数据库的db_accessadmin角色中。

Usesales

EXECUTEsp_grantdbaccess'whb','whb'

EXECUTEsp_addrolemember'db_accessadmin','whb'

EXECUTEsp_helpuser'whb'

【例11.8】从当前数据库sales中删除用户账户whb。

EXECUTEsp_revokedbaccess'whb'

【例11.9】

EXECUTEsp_addsrvrolemember'whb','sysadmin'

【例11.10】

EXECUTEsp_dropsrvrolemember'whb','sysadmin'

【例11.11】

EXECUTEsp_addrolemember'db_owner','jyb'

EXECUTEsp_droprolemember'db_owner','jyb'

用系统存储过程sp_droprolemember实现删除固定数据库角色成员。

【例11.12】

USEsales

CREATEROLEdb_manage

USEsales

DROPROLEdb_manage

【例11.13】

USEsales

GRANTSELECT,INSERT,DELETEONEmployeesTOwhb

DENYUPDATEONEmployees(编号)TOwhb

GRANTUPDATEONEmployees(姓名,性别,部门,电话,地址)TOwhb

【例11.14】

USEsales

GRANTSELECTONEmployeesTOck

DENYINSERT,UPDATE,DELETEONEmployeesTOck

【例11.15】

USEsales

--给用户WORK1\jyb,ck,public,whb赋予查询表Employees的权限

GRANTSELECTONEmployeesTO[WORK1\jyb],ck,[public],whb

--拒绝用户WORK1\jyb,ck,public,whb拥有对表Employees实施INSERT,UPDATE,DELETE的权限

DENYINSERT,UPDATE,DELETEONEmployeesTO[WORK1\jyb],ck,[public],whb

--拒绝用户WORK1\jyb,ck,public,whb查询表Employees的字段“地址”

DENYSELECT(地址)ONEmployeesTO[WORK1\jyb],ck,[public],whb

【例11.18】还原整个数据库。

RESTOREDATABASEsalesFROMSalesBakWITHREPLACE

。

猜你喜欢

最安全有效的减肥药

最安全有效的减肥药

编辑:小徐

现在的减肥药真的是真假难分,在选择减肥药的同时也应该更加小心,减肥药多种多样,那么如何才能选择最安全有效的减肥药,也成了很多小仙女的内心疑问,下面就跟着XV-1036小编一起看一下,如何选择最安全有效的减肥药。 最安全有效的减肥药选购方法 1、首先需要观察产品的外包装,在包装中可以看到其配方是不是含有激素,含有激素的减肥药对身体的内..

吃减肥药失眠

吃减肥药失眠

编辑:小徐

随着现在流行以瘦为美,很多人会不顾身体的健康选择减肥药,达到快速减肥瘦身的效果,但是很多减肥药都是有副作用的,副作用比较轻的就是失眠现象,那么吃减肥药出现失眠是怎么回事儿?如果出现失眠后,我们应该怎样缓解? 吃减肥药失眠是怎么回事 减肥药中富含安非他命,所以减肥药服用了太多会有失眠现象,服用减肥药期间,身体会逐渐出现抗药性,身..

最新文章