建立如下三个表图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话) 出版社(编号,出版社名称,地址) 并根据上面基本表的信息定义一个存储过程,完成下面功能: 入口参数:出版社编号 1 显示出版社信息 2 如果没书出版,删除该记录 3 如果该出版社的图书平均价格低于20元,所有书涨价10%。
时间: 2024-04-04 10:32:47 浏览: 264
好的,根据你的要求,我已经编写了一个 SQL 脚本,用于创建你所需的三个表和一个存储过程,代码如下:
```
-- 创建作者表
CREATE TABLE 作者 (
编号 INT PRIMARY KEY,
姓名 NVARCHAR(50),
电话 NVARCHAR(20)
);
-- 创建出版社表
CREATE TABLE 出版社 (
编号 INT PRIMARY KEY,
出版社名称 NVARCHAR(50),
地址 NVARCHAR(100)
);
-- 创建图书表
CREATE TABLE 图书 (
书号 INT PRIMARY KEY,
书名 NVARCHAR(100),
作者编号 INT FOREIGN KEY REFERENCES 作者(编号),
价格 DECIMAL(18, 2),
出版社编号 INT FOREIGN KEY REFERENCES 出版社(编号)
);
-- 创建存储过程
CREATE PROCEDURE update_publishing_house
@publishing_house_id INT
AS
BEGIN
-- 1. 显示出版社信息
SELECT * FROM 出版社 WHERE 编号 = @publishing_house_id;
-- 2. 如果没书出版,删除该记录
IF NOT EXISTS (SELECT * FROM 图书 WHERE 出版社编号 = @publishing_house_id)
BEGIN
DELETE FROM 出版社 WHERE 编号 = @publishing_house_id;
END;
-- 3. 如果该出版社的图书平均价格低于20元,所有书涨价10%。
DECLARE @avg_price DECIMAL(18, 2) = (
SELECT AVG(价格) FROM 图书 WHERE 出版社编号 = @publishing_house_id
);
IF @avg_price < 20
BEGIN
UPDATE 图书
SET 价格 = 价格 * 1.1
WHERE 出版社编号 = @publishing_house_id;
END;
END;
```
这个 SQL 脚本将创建三个表(作者、出版社和图书),并定义一个名为 `update_publishing_house` 的存储过程,用于完成你所需的三个功能。你可以将这个 SQL 脚本保存为 `.sql` 文件,然后在 SQL Server Management Studio 或其他 SQL 工具中运行它。当表和存储过程创建成功后,你就可以使用 `update_publishing_house` 存储过程来实现你的需求了。
阅读全文