SQLSERVER2008实用教程实验参考答案(实验5)

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验5 T-SQL编程

1. 自定义数据类型

新建一个数据类型ID_Type,用于描述员工编号。新建一个表Employees3,表结构与Employees 表类似,EmployeeID列的数据类型使用自定义的数据类型。

方法1:使用系统内置的存储过程sp_addtype。

USE YGGL

EXEC sp_addtype'ID_Type',

'char(6)','not null'

GO

方法2:使用CREATE TYPE语句

USE YGGL

GO

CREATE TYPE ID_Type FROM char(6)NOT NULL;

--查看可编程性-类型-用户定义数据类型中的变化

IF EXISTS(SELECT name FROM sysobjects WHERE name='Employees3')

DROP TABLE Employees3

CREATE TABLE Employees3

(

EmployeeID ID_Type PRIMARY KEY,

Name char(10)NOT NULL,

Education char(4)NOT NULL,

Birthday date NOT NULL,

Sex bit NOT NULL DEFAULT 1,

WorkYear tinyint NULL,

Address varchar(40)NULL,

PhoneNumber char(12)NULL,

DepartmentID char(3)NOT NULL

)

GO

2. 变量的使用

(1)创建一个名为Female的用户变量,并在Employees表中查询所有女员工的编号、姓名、性别

DECLARE@Female bit--定义变量,指定变量数据类型

SET@Female=0 --为该变量赋初值

SELECT EmployeeID,Name,Sex FROM Employees WHERE Sex=@Female;

(2)定义一个变量,将员工编号为102201的员工的电话号码赋值给该变量

DECLARE@Phone char(12)

SET@Phone=(SELECT PhoneNumber FROM Employees WHERE EmployeeID='102201')

SELECT a.*,@Phone FROM Employees a WHERE EmployeeID='102201';

(3)定义一个变量,用于描述Salary表中000001号员工的实际收入,然后查询该变量DECLARE@RealIncome float

SET@RealIncome=(SELECT InCome-OutCome FROM Salary WHERE

EmployeeID='000001')

SELECT@RealIncome;

3. 运算符的使用

(1)查询员工的实际收入

SELECT InCome-OutCome AS实际收入FROM Salary;

(2)查询工作时间大于5年的员工信息

SELECT*FROM Employees WHERE WorkYear>5;

4.流程控制语句

(1)判断Employees表中是否存在编号为111006的员工,如果存在,则显示该员工信息,如果不存在,则显示查无此人

IF EXISTS(SELECT Name FROM Employees WHERE EmployeeID='111006') SELECT*FROM Employees WHERE EmployeeID='111006'

ELSE

SELECT'查无此人'

(2)判断姓名为“王林”的员工的实际收入是否高于3000元,如果是,则显示其收入,如果不是,则显示“收入不高于3000元”

--先查找实际收入,再进行IF判断

IF

(SELECT b.InCome-b.OutCome AS实际收入FROM Employees a,Salary b WHERE a.EmployeeID=b.EmployeeID AND ='王林')>3000

SELECT b.InCome-b.OutCome AS实际收入FROM Employees a,Salary b WHERE a.EmployeeID=b.EmployeeID AND ='王林'

ELSE

SELECT'收入不高于元'

(3)假设变量X的初始值为0,每次加1,直到X变为5,并打印输出

DECLARE@X INT

SET@X=0

WHILE@X<5

BEGIN

SET@X=@X+1

PRINT'X='+CONVERT(char(1),@X)

END

GO

(4)使用循环输出一个用’*’组成的三角形

DECLARE@i INT

DECLARE@n INT

SET@n=10

SET@i=1

WHILE (@i<@n)

BEGIN

--SPACE函数:返回指定个数重复的空格组成的字符串

--REPLICATE函数:以指定的次数重复字符表达式

PRINT (SPACE((@n-@i)/2)+REPLICATE('*',@i))

SET@i=@i+2

END

GO

(5)使用CASE语句对Employees表按部门进行分类

SELECT EmployeeID,DepartmentID=

CASE DepartmentID

WHEN 1 THEN (SELECT DepartmentName FROM Departments b WHERE

b.DepartmentID='1')

WHEN 2 THEN (SELECT DepartmentName FROM Departments b WHERE

b.DepartmentID='2')

WHEN 3 THEN (SELECT DepartmentName FROM Departments b WHERE

b.DepartmentID='3')

WHEN 4 THEN (SELECT DepartmentName FROM Departments b WHERE

b.DepartmentID='4')

WHEN 5 THEN (SELECT DepartmentName FROM Departments b WHERE

b.DepartmentID='5')

END

FROM Employees ORDER BY DepartmentID;

5. 自定义函数的使用

定义一个函数CHECK_ID:对于一个给定的DepartmentID值,查询该值在Departments表中是否存在,如果存在,则返回1,不存在,则返回0。

CREATE FUNCTION CHECK_ID(@DepartmentID char(3))

RETURNS INTEGER AS

BEGIN

DECLARE@num INT

IF EXISTS(SELECT DepartmentID FROM Departments WHERE

DepartmentID=@DepartmentID)

SET@num=1

ELSE

SET@num=0

RETURN@num

END

GO

写一段程序调用该函数。向Employees表中添加一条记录时,首先调用函数CHECK_ID检索该记录的DepartmentID值在Departments表中是否存在,如果存在,则添加记录,如果不存在,则输出‘非法值’

方法1:

相关文档
最新文档