西南石油大学实验报告
注意:在粘贴截图时请保留窗口完整标题,但只需保留关键界面,多余的空白界面请删除。
一、实验课时:2
二、实验目的
(1) 学习如何编写简单的Transact-SQL程序。
(2) 掌握函数的使用。
(3) 学习如何执行Transact-SQL程序。
(4) 掌握简单存储过程的编写方法。
(5) 掌握简单自定义函数的编写方法。
三、实验要求
(1) 使用SQL Server 2008查询分析器。
(2) 严格依照操作步骤进行。
四、实验环境
(1) PC机。
(2) SQL Server 2008。
五、实验内容及步骤
1.使用局部变量、全局变量
(1)定义一个tinyint的整型变量,为其赋值45,并显示变量的值。
DECLARE@LENGTH tinyint
SET@LENGTH= 45
PRINT@LENGTH;
(2)定义一个长度为20的可变长度型字符变量,为其赋值“Welcome to SWPU”,并显示变量的值。
DECLARE@str nchar(20)
SET@str='Welcome to SWPU'
PRINT@str
(3)查询当前数据库服务器名。
select@@SERVERNAME
(4)查询当前数据库管理系统版本。
SELECT@@VERSION;
2.函数的使用
(1) 数学函数的使用
分别用函数求出-3的绝对值,16的平方根,5的三次方。
DECLARE@i int;
SET@i=-3;
SELECT ABS(@i);
GO
select sqrt(16)
select power(5,3)
(2) 字符串函数的使用
1)分别将字符串“china”、“MACHINE”转换成大写、小写字母;
select upper('china')
select lower('MACHINE')
2)去掉字符串“ machine ”左边的空格,再与“china”及“press“连接起来;
select'china'+LTRIM(' machine
')+'press'
3)去掉字符串“ machine ”右边的空格,再与“china”及“press“连接起来;
select'china'+RTRIM(' machine
')+'press'
4)去掉字符串“ machine ”左右两边的空格,再与“china”及“press“连接起
来;
select'china'+LTRIM(RTRIM(' machine '))+'press'
5)将字符串“abcdabcd”中的所有字符“a”换为字符“h”。
declare@c varchar(10)
set@c='abcdabcd'
print replace(@c,'a','h')
(3) 日期、时间函数的使用
1)返回系统当前日期并以整数形式返回当前日期的年份、月份、日及季度;
select GETDATE()
select YEAR(getdate())
select MONTH(getdate())
select DAY(GETDATE())
SELECT datepart(quarter,GETDATE())
2)返回给定日期“2006-2-21”与当前日期相差的天数。
declare@a datetime
set@a='2006-02-21'
select DATEDIFF(DAY,@a,GETDATE())
(4) 系统函数与元数据函数的使用
1)显示正在使用的用户名、数据库名;
select USER_NAME(),DB_NAME()
2)返回当前主机标识及主机名称。
select HOST_ID()as当前主机标识
select HOST_NAME()as当前主机名称
3.编写较复杂的Transact-SQL程序
(1)在COMPANY数据库中,我们将员工的工资水平分为三类,即工资小
于30000为低工资,工资大于等于30000且小于50000为中等工资,工
资大于等于50000为高工资。
请显示所有员工的姓名及其对应的工资水
平。
SELECT Ssn,
'工资水平'=CASE
WHEN(Salary< 30000)
THEN'低工资'
WHEN(Salary>= 30000 AND Salary< 50000)
THEN'中等工资'
WHEN(Salary>= 50000)
THEN'高工资'
END
FROM EMPLOYEE
(2)用Transact-SQL语言编写程序计算1~100之间所有能被7整除的数
的总和。
declare@sum int,@i int
set@sum= 0
set@i= 0
while@i<= 100
begin
if(@i% 7 = 0)
set@sum=@sum+@i
set@i=@i+ 1
end
print@sum
4.编写简单存储过程
(1) 在COMPANY数据库中,编写一存储过程:输入参数为部门编号,查询该部门员工的FNAME,LNAME,SSN,SEX和DNAME信息
create PROCEDURE departem
@dnum smallint,
@FNAME nvarchar(50)OUTPUT,
@LNAME nvarchar(50)OUTPUT,
@SSN char(9)OUTPUT,@SEX char(2) OUTPUT,@DNAME nvarchar(50)OUTPUT
as
begin
select Fname,Lname,Ssn,Sex,dname from EMPLOYEE
join DEPARTMENT on Dno=Dnumber where@dnum=dno
end
(3)调用前面创建的存储过程,查询部门5的员工信息
declare@FNAME nvarchar(50),@LNAME nvarchar(50),
@SSN char(9),@SEX char(2),@DNAME nvarchar(50)
exec dbo.departem5,@FNAME OUTPUT, @LNAME OUTPUT,
@SSN OUTPUT,
@SEX OUTPUT,
@DNAME OUTPUT
select@FNAME,@LNAME,
@SSN,@SEX,@DNAME
5.编写简单自定义函数
(1) 在COMPANY数据库中,编写一自定义函数:自变量为部门编号,返回值为该部门的员工总数
create function fn_count
(@myinput smallint)
returns smallint
as
begin
declare@zong smallint
select@zong=COUNT(*)from EMPLOYEE where@myinput=Dno
return@zong
end
(2) 调用前面创建的自定义函数,查询所有的部门编号,部门名称以及该部门的员工人数
SELECT distinct
Dnumber,Dname,dbo.fn_count(dno)as总人数
FROM EMPLOYEE
join DEPARTMENT on Dno=Dnumber
六、收获,体会及问题
(请详细书写,写得越详细、越个性化、越真实越好,否则我不知道你做这个实验的心路历程,也就无法充分地判断你是否是独立完成的这个实验、你是否在
做这个实验时进行了认真仔细地思考、通过这个实验你是否在实践能力上得到了提高)
通过本次实验,知道了如何编写简单的Transact-SQL程序、函数的使用、学习如何执行Transact-SQL程序、简单存储过程的编写方法、掌握简单自定义函数的编写方法。
在学习这些方法的时候可以仿照我们平时一些c语言或者其他编程语言来理解,虽然T-SQL书写方式不同,但是其中的思想是还是相同的。
在学习该语言时,要学会如何查文档,更加灵活使用系统自带的函数。