第8章
1、 执行存储过程,字符串变量 2、A、D
3、存储过程与存储在客户计算机的本地T-SQL语句相比,它具有如下优点: 存储过程在服务器端运行,而且存储过程是预编译的,执行速度快。如果某个操作需要大量的T-SQL语句或重复执行,那么使用存储过程比直接使用T-SQL语句执行得更快。
用户可以通过发送一条执行存储过程的语句实现一个复杂的操作,而不需要在网络上发送几百条T-SQL语句,这样可以减少在网络流量
使用存储过程可以增强代码的重用性和共享性,存储过程在被创建后,可以在程序中被多次调用,而不必重新编写。
4、SQL Server支持五种类型的存储过程:系统存储过程、本地存储过程、临时存储过程、远程存储过程、扩展存储过程。 5、USE Sales
GO
CREATE PROC proc_find @goodname Varchar(20) AS
IF EXISTS(SELECT * FROM Goods WHERE 商品名称=@goodname) RETURN 1 ELSE RETURN 0 6、在Sales数据库中建立一个名为date_to_date_sales的存储过程:该存储过程将返回在两个指定日期之间的所有销售记录。
USE Sales GO
CREATE PROC date_to_date_sales @StartDate datetime, @EndDate datetime AS
SELECT * FROM sell
WHERE 售出时间 BETWEEN @StartDate AND @EndDate
第9章
1、inserted,UPDATE,DELETE 2、D
3、触发器是一种与数据表紧密关联的特殊的存储过程,当该数据表有插入(INSERT)、更改(UPDATE)或删除(DELETE)事件发生时,所设置的触发器就会自动被执行,以进行维护数据完整性,或其他一些特殊的数据处理工作。触发器分为AFTER
6
触发器和INSTEAD OF 触发器两种类型。
4、USE Sales GO
CREATE TRIGGER tri_ReportGoods ON Goods FOR UPDATE AS
IF UPDATE(数量) BEGIN
IF (SELECT MIN(数量) FROM deleted ) <5
PRINT '有商品库存低于5件,请核查,速进货!' END
5、USE Sales GO
CREATE TRIGGER tri_GoodsCount ON Sell FOR INSERT AS BEGIN
DECLARE @GoodNO int,@Sellnum int
SELECT @GoodNO=商品编号, @Sellnum=数量 FROM inserted UPDATE Goods
SET 数量=数量-@Sellnum WHERE 商品编号=@GoodNO END
第十章
1、
(1)定义函数
在查询分析器中运行以下命令: USE Sales GO
CREATE FUNCTION Fn_Sell (@bt DateTime) RETURNS TABLE AS
RETURN
(SELECT Goods.商品名称,Sell.数量 FROM Goods,Sell
7
WHERE (Sell.售出时间=@bt AND Goods.商品编号=Sell.商品编号) ) (2)测试
在查询分析器中运行以下命令:
SELECT * FROM dbo.Fn_Sell('2005-6-5') 2、
(1)定义函数
在查询分析器中运行以下命令: USE Sales GO
CREATE FUNCTION Fn_DateTotal (@m Int)
RETURNS @Fn_DateTotal TABLE
(日期 DateTime PRIMARY KEY NOT NULL, 日销售额 Money NOT NULL ) AS
BEGIN
INSERT @Fn_DateTotal
SELECT Sell.售出时间 AS 日期,SUM(Sell.数量*Goods.零售价) AS 日销售额 FROM Sell,Goods
WHERE (MONTH(Sell.售出时间)=@m AND Sell.商品编号=Goods.商品编号) GROUP BY Sell.售出时间 RETURN END (2)测试
在查询分析器中运行以下命令:
SELECT * FROM dbo.Fn_DateTotal(6) 返回结果是6月份销售统计结果。 在查询分析器中运行以下命令: Declare @err Int USE Sales
BEGIN TRANSACTION
UPDATE T1 SET T1.数量= T1.数量+ GG.数量 FROM T1,GG
WHERE T1.编号= GG.编号 SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作
8
BEGIN
ROLLBACK TRANSACTION RETURN END
INSERT T1
SELECT * FROM GG
WHERE NOT (编号 IN (SELECT 编号 FROM T1)) SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN END
COMMIT TRANSACTION 3、
在查询分析器中运行以下命令: Declare @err Int USE Sales
BEGIN TRANSACTION
UPDATE T1 SET T1.数量= T1.数量+ GG.数量 FROM T1,GG
WHERE T1.编号= GG.编号 SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN END
INSERT T1
SELECT * FROM GG
WHERE NOT (编号 IN (SELECT 编号 FROM SELECT @err=@@error IF @err!=0
--更新失败,回滚所有操作 BEGIN
ROLLBACK TRANSACTION RETURN
9
T1)) END
COMMIT TRANSACTION
实验参考答案
实验二
1.
CREATE DATABASE StuInfo ON
PRIMARY (NAME = StuInfo _Data,, FILENAME = 'D:\\ StuInfo _Data.Mdf', SIZE =2MB,
MAXSIZE = 10MB, FILEGROWTH =1 MB) LOG ON
(NAME = StuInfo _Log ,
FILENAME = 'D:\\ StuInfo _Log.Ldf', SIZE = 1MB,
MAXSIZE =5MB,
FILEGROWTH = 1MB) GO
2.
USE StuInfo GO
--创建学生表T_Student CREATE TABLE T_Student_
( S_Number Char(8) NOT NULL
CONSTRAINT PK_ S_Number PRIMARY KEY CLUSTERED ,
S_Name Char(10) NOT NULL, Sex Char(2) NULL,
Birthday DateTime NOT NULL, ) GO
--创建课程表T_Course CREATE TABLE T_Course
( C_Number Char(4) NOT NULL
10