内蒙古工业大学信息工程学院
实 验 报 告
课程名称: 数据库应用
实验名称: T-SQL编程
实验类型: 验证性□ 综合性□ 设计性□
实验室名称: 九楼机房
班级: 学号:
姓名: 组别:
同组人: 成绩:
实验日期:
预习报告成绩: 指导教师审核(签名): 年 月 日
预习报告
一、实验目的
1.掌握用户自定义类型的使用;
2.掌握变量的分类及其使用;
3.掌握各种运算符的使用;
4.掌握各种控制语句的使用;
5.掌握系统函数及用户自定义函数的使用。
二、实验内容
1.自定义数据类型的使用
(1)对于实验1给出的数据库表结构,自定义1个数据类型ID—type,用于描述员工编号。在查询分析器编辑窗口输入如下程序并执行:
USE YGGL
EXEC sp_addtype’ID_type’,
‘char(6)’,’not null’
GO
注意:不能漏掉单引号。
(2)重新创建YGGL数据库的Employees表。在查询分析器编辑窗口输入如下程序并执行:
USE YGGL
IF EXISTS(SELECT name FROM sysobjects
WHERE type=‘U’and name='Employees’)
DROP table employees
/*首先在系统表中查看EmployeeS表是否存在,若存在,删除该表
CREATE TABLE Employees
( EmployeelD ID_type, /*定义字段EmployeelD的类型为ID_type
Name char(10)NOT NULL.
Birthday datetime NOT NULL.
Sex bit NOT NULL.
Address char(20)NOT NULL.
Zip char(6)NULL,
PhoneNumber char(12)NULL,
EmailAddree char(20)NULL,
DepartmentlD char(3)NOT NULL)
GO
【思考与练习】
编写如下程序:
(1)自定义1个数据类型,用于描述YGGL数据库中的DepartmentlD宁段,然后编写代码重新定义数据库的各表。
(2)当对Departments表的DepartmentID字段值修改时,对Employees表中对应的 DepartmentID字段值也进行相应修改。
(3)对Employees表进行修改时,不允许对DepartmentID宁段值进行修改。
2.自定义函数的使用
(1)定义一函数实现如下功能。对于1个给定的DepartmentlD之值,查询该值在 Departments表中是否存在,若存在返回0,否则返回-1。
在查询分析器的编辑窗口输入如下程序并执行:
CREATE FUNCTION CHECK_ID
(@departmentid char(3))
RETURNS integer AS
begin
declare@num int
IF EXISTS(SELECT departmentlD FROM departments
WHERE@departmentid=departmentlD)
select @num=0
ELSE
select @num=-l
return @num
end
Go
(2)写一段T-SQL脚本程序调用上述函数。当向Employees表插入1条记录时,首先调用函数CHECK_ID检索该记录的DepartmentlD之值在表Departments的DepartmentlD字段中足否存在对应值,若存在,则将该记录插入Employees表。
在查询分析器编辑窗口输入如下程序并执行:
USE yggl
declare@hum int
select@num=dbo.Check_id(‘2’)
if@num=O
insert employees
values(’990210,,’张文’,1982-03-24,0,
‘南京镇江路2号’,’2l0009’,’3497534',’zhang@jlonline.com','2’)
Go
【思考与练习】
编写如下程序:
创建一个用户自定义函数,利用该函数计算从键盘上任意输入的一个整数的阶乘。
实验报告成绩: 指导教师审核(签名): 年 月 日
实验报告
1.自定义数据类型的使用
(1)对于实验1给出的数据库表结构,自定义1个数据类型ID—type,用于描述员工编号。
(2)重新创建YGGL数据库的Employees表.
2.自定义函数的使用
(1)定义一函数实现如下功能。对于1个给定的DepartmentlD之值,查询该值在 Departments表中是否存在,若存在返回0,否则返回-1。
(2)写一段T-SQL脚本程序调用上述函数。当向Employees表插入1条记录时,首先调用函数CHECK_ID检索该记录的DepartmentlD之值在表Departments的DepartmentlD字段中足否存在对应值,若存在,则将该记录插入Employees表。
第二篇:数据库T-sql编程
T-sql 编程
一、目的和要求
1, 进一步巩固前面4章所学内容
2, 掌握用户自定义类型的使用
3, 掌握变量的分类及其使用
4, 掌握各种运算符的使用
5, 掌握各种控制语句的使用
6, 掌握系统函数和用户自定义函数的使用
二、准备
1, 了解t-ql支持的各种基本数据类型
2, 了解自定义数据类型使用的一般步骤
3, 了解t-sql各种运算符,控制语句的功能和使用方法
4, 了解系统函数的调用方法
5, 了解用户自定义函数使用的一般步骤
三、内容
1、系统函数的使用:
1)使用rand()函数产生一个0-1的随机数,再产生一个10-99之间的随机数。
select RAND()
select RAND()*89-10
2)使用Square() 函数求7的平方。
select SQUARE(7)
3)使用sqrt()函数求9的平方根。
select sqrt(9)
4)使用ascii函数返回“china”字符串最左边的字符的ascii值。
select ascii(LEFT('china',1))
5)使用left()函数返回“china”左边开始的3个字符。
select LEFT('china',3)
6)使用right( )返回‘abcdefg’右边的4个字符
select right('abcdefg',4)
7)使用substring() 返回 ‘abcdefg’从第2个字符开始的连续5个字符
select substring('abcdefg',2,5)
8)请用ltrim,rtrim去除字符串(' ad dad dadfad ’)左右两边的空格
select ltrim(rtrim(' ad dad dadfad '))
9)定义两个变量,一个赋值为1,一个为2,请分别用select和print 显示出他们相加的结果。并说明他们有何区别
declare @a int
declare @b int
set @a=1
set @b=2
select @a+@b
declare @a int
declare @b int
set @a=1
set @b=2
print @a+@b
Select是以结果的方式显示的,而print是以消息的方式显示的
10)说明char类型和varchar类型的区别。
数据类型
char表示的是固定长度;
varchar表示的是实际长度的数据类型
比如:如果是char类型,当你输入字符小于长度时,后补空格;而是varchar类型时,则表示你输入字符的实际长度
2、 流程控制语句的使用
1)判断员工编号为 “010008”的员工是否存在,如果存在请显示该员工的所有信息,否则,请显示“查无此人”。
if exists(select * from employees where employeeid='010008')
select * from employees where employeeid='010008'
else
select '查无此人'
2)定义一个变量@x,初值为0,请用循环语句使该变量每次加1,直至变量值为6。
declare @x int
set @x=0
while @x<6
begin
set @x=@x+1
end
select @x
3)查出员工编号为‘010008’的员工的工资,假设每年工资加200。请问这位员工多少年后工资会加到5000?
select income from salary where employeeid='010008'
declare @a int
declare @b int
set @a=1582
set @b=0
while @a<5000
begin
set @a=@a+200
set @b=@b+1
end select @b
4)假设有字符串:‘abcdefghijlklmn’.请把这个字符串倒置显示。
declare @a varchar(15)
deCLARE @b varchar(15)
declare @s int
set @b=''
set @a='abcdefghijlklmn'
set @s=DATALENGTH(@a)
while @s>0
begin
set @b=@b+SUBSTRING(@a,@s,1)
set @s=@s-1
end
select @b
5)假设有字符串:‘aBcDsdfeEFg’。请把这个字符串转化为大写字符串显示(主意:数字,符号,大写字符及其他字符不用转换)。
1.
select UPPER('aBcDsdfeEFg')
2.
declare @i int
declare @x varchar(12)
set @x=''
set @i=0
while @i<12
begin
if(ASCII(SUBSTRING('aBcDsdfeEFg',@i,1))>=97 and ASCII(SUBSTRING('aBcDsdfeEFg',@i,1))<=122 )
set @x=@x+char(ASCII(SUBSTRING('aBcDsdfeEFg',@i,1))-32)
else
set @x=@x+SUBSTRING('aBcDsdfeEFg',@i,1)
set @i=@i+1
end
select @x
6)实现1+2+3+4+……+100的T-sql程序。
declare @a int
declare @s int
set @a=0
set @s=0
while @s<=100
begin
set @a=@s+@a
set @s=@s+1
end
select @a
7)实现1*2*3*4*5*6*7也就是7!。
declare @a int
declare @s int
set @a=1
set @s=1
while @s<=7
begin
set @a=@s*@a
set @s=@s+1
end
select @a
8)实现1!+2!+3!+…..+7!的T-sql程序
declare @n int
declare @s int
declare @a int
declare @b int
set @n=1
set @b=0
while @n<=7
begin
set @s=1
set @a=@n
while @a>1
begin
set @s=@s*@a
set @a=@a-1
end
set @b=@b+@s
set @n=@n+1
end
select @b
3、 自定义函数的使用
1) 编写函数f1。要求能够根据给定的两个int变量求出其中小的那一个值。
2) 编写函数f2。要求能够根据给定的三个int变量求出其中最大的那一个值。
3) 编写函数f3。对于一个给定的员工编号值,查询该值在员工表中是否存在,如存在返回‘该员工存在!’,否则返回‘该员工不存在!’。并调用该函数,判断员工编号为‘000001’的员工是否存在。
4) 编写函数f4:根据员工编号求出该员工的年收入,并调用该函数求出‘000001’员工的年收入。
5) 编写函数f5:根据员工编号求出该员工的年收入和年支出,并调用该函数求出‘’员工的年收入和年支出。
6) 编写函数f6。根据部门编号求出该部门的平均收入和平均支出,并调用该函数求出‘5’部门的平均收入和平均支出。(请先考虑该函数应为哪种函数?)
7) 编写函数f7。
先创建一个视图gy_view,该视图包括雇员编号及其所在部门和收入支出信息然后创建一个内嵌表值函数,实现根据雇员编号可通过视图gy_view查询其所在部门和该员工收入、支出。并调用该函数查询员工编号为‘020018’
四、实验总结(请写出你的困难和建议)
五、思考题
还记得的游标使用步骤吗?请试着用游标把雇员表中所有的信息逐行读取出来。