factory数据库考核
表中的职工人数,回滚该事务,最后显示worker表中的职工人数。
USE factory
GO
SELECT COUNT(*)AS 职工人数 FROM worker GO
BEGIN TRANSACTION
INSERT INTO worker
VALUES(11,'小明','女','1955/03/08','1','1975/10/10','4') SAVE TRANSACTION TRAN1
SELECT COUNT(*)AS 职工人数 FROM worker GO
ROLLBACK TRANSACTION
SELECT COUNT(*)AS 职工人数 FROM worker GO
6、在factory数据库上,使用T-SQL语句完成如下各题:
(1)在worker表中的“部门号”列上创建一个非聚集索引;若该索引已存在,则删除后重建。
CREATE NONCLUSTERED INDEX bmh_index ON worker(部门号) GO
(2)在salary表的“职工号”和“日期”列创建聚集索引,并且强制唯一性。
CREATE UNIQUE CLUSTERED INDEX zgh_rq_index ON salary(职工号,日期) GO
7、在factory数据库上,使用T-SQL语句完成如下各题:
(1)建立视图view1,查询所有职工的职工号、姓名、部门名和2004年2月份工资,并按部门名顺序排列。
USE factory GO
CREATE VIEW view1
AS
SELECT worker.职工号,worker.姓名,部门名,工资 FROM worker,depart,salary WHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号 GO
(2)建立视图view2,查询所有职工的职工号、姓名和平均工资。
USE factory GO
CREATE VIEW view2
AS
SELECT worker.职工号,worker.姓名,AVG(工资) AS 平均工资 FROM worker,salary GROUP BY worker.职工号,worker.姓名 GO
(3)建立视图view3,查询各部门名和该部门的所有职工平均工资。
USE factory GO
factory数据库考核
CREATE VIEW view3
AS
SELECT 部门名,AVG(工资) AS 平均工资 FROM worker,depart,salary WHERE worker.部门号=depart.部门号 AND worker.职工号=salary.职工号 GROUP BY 部门名 GO
(4)显示视图view3的定义。
USE factory GO
EXEC sp_help view3 GO
8、在factory数据库上,使用T-SQL语句完成如下各题: (1)修改worker表的结构,添加“E_mail varchar(20)”字段。
USE factory GO
ALTER TABLE worker ADD E_mail varchar(20) GO
(2)将上例中worker表中“E_mail”字段的数据类型改为varchar(30)
USE factory GO
ALTER TABLE worker
ALTER COLUMN E_mail varchar(30) GO
(3)删除worker表中的“E_mail”字段
USE factory GO
ALTER TABLE worker DROP COLUMN E_mail GO
(4)将worker表中姓名为“陈明”的部门号改为“101”。
USE factory GO
UPDATE worker SET 部门号='101' WHERE 姓名='陈明' GO
(5)删除工资表salary中姓名为“陈明”的记录。
USE factory GO
DELETE FROM worker
factory数据库考核
WHERE 姓名='陈明' GO
(6)实施worker表的“性别”列默认值为“男”的约束。
USE factory GO
ALTER TABLE worker ADD CONSTRAINT default_xb DEFAULT '男' FOR 性别 GO
(7)实施salary表的“工资”列值限定在0~9999的约束。
USE factory GO
ALTER TABLE salary
ADD CONSTRAINT check_gz
CHECK (工资>=0 AND 工资<=9999) GO
(8)实施depart表的“部门号”列值唯一的非聚集索引的约束。
USE factory GO
ALTER TABLE depart
ADD CONSTRAINT unique_bmh UNIQUE NONCLUSTERED (部门号) GO
(9)为worker表建立外键“部门号”,参考表depart的“部门号”列。
USE factory GO
ALTER TABLE worker
ADD CONSTRAINT wj_worker_depart
FOREIGN KEY (部门号) REFERENCES depart(部门号) GO
(10)建立一个规则sex:@性别='男' OR @性别='女',将其绑定到worker表的“性别”列上。
USE factory GO
CREATE RULE sex
AS @性别='男' OR @性别='女' GO
EXEC sp_bindrule 'sex','worker.性别' GO
(11)删除(1)小题所建立的约束。
USE factory GO
ALTER TABLE worker
DROP CONSTRAINT default_xb
factory数据库考核
GO
(12)删除(2)小题所建立的约束。
USE factory GO
ALTER TABLE salary
DROP CONSTRAINT check_gz GO
(12)删除(3)小题所建立的约束。
USE factory GO
ALTER TABLE depart
DROP CONSTRAINT unique_bmh GO
(14)删除(4)小题所建立的约束。
USE factory GO
ALTER TABLE worker
DROP CONSTRAINT wj_worker_depart GO
(15)解除(5)小题所建立的绑定并删除规则sex。
EXEC sp_unbindrule 'worker.性别' GO
DROP RULE sex GO
9、在的factory数据库上,使用T-SQL语句完成如下各题: (1)创建一个为worker表添加职工记录的存储过程Addworker。
CREATE PROCEDURE Addworker @number int, @name char(8), @gender char(2), @birthday datetime, @party char(2), @starttime datetime, @departnumber int AS BEGIN
INSERT INTO worker
VALUES(@number,@name,@gender,@birthday,@party,@starttime,@departnumber) END GO
(2)创建一个存储过程Delworker删除worker表中指定职工号的记录。
USE factory GO
CREATE PROCEDURE Delworker
factory数据库考核
@number int AS BEGIN
DELETE FROM worker WHERE 职工号=@number END GO
(3)显示存储过程Delworker。
USE factory GO
EXEC sp_helptext Delworker GO
(4)删除存储过程Addworker和Delworker。
USE factory GO
DROP PROCEDURE Addworker,Delworker GO
10、在factory数据库上,使用T-SQL语句完成如下各题:
(1)在表depart上创建一个触发器depart_update,当更改部门号时同步更改worker表中对应的部门号。
USE factory GO
CREATE TRIGGER depart_update ON depart FOR UPDATE AS
IF UPDATE(部门号) BEGIN
DECLARE @number1 int,@number2 int
SELECT @number1=deleted.部门号,@number2=inserted.部门号 FROM deleted,inserted UPDATE worker
SET 部门号=@number1 WHERE 部门号=@number2 END GO
(2)在表worker上创建一个触发器worker_delete,当删除职工记录时同步删除salary表中对应职工的工资记录。
USE factory GO
CREATE TRIGGER worker_delete ON worker FOR DELETE AS BEGIN
DELETE FROM salary