用能够运行的sqlserver语句实现:图书(书号,书名,作者编号,价格,出版社编号) 作者(编号,姓名,电话) 出版社(编号,出版社名称,地址) 定义一个事务,完成下列步骤: 1按出版社编号取其出版的图书平均价格,若平均价格小于20,给每本书增加一元,直至其平均价格超过20(每增一次显示一次)。 2显示该出版社所有图书名称 、价格。 3 若有书超过50元,取消上述操作。 4提交后显示该出版社的图书价格。
时间: 2024-03-27 08:37:03 浏览: 55
《数据库原理与应用》课程实验报告 数据库的定义和维护sql语句
以下是能够实现上述要求的 SQL Server 代码:
```
BEGIN TRANSACTION
DECLARE @publisherId INT = 1 -- 假设要查询出版社编号为1的出版社
-- 步骤1:查询该出版社平均价格是否小于20,若小于则增加价格
DECLARE @avgPrice DECIMAL(10,2)
SELECT @avgPrice = AVG(价格) FROM 图书 WHERE 出版社编号 = @publisherId
WHILE @avgPrice < 20
BEGIN
UPDATE 图书 SET 价格 = 价格 + 1 WHERE 出版社编号 = @publisherId
SELECT @avgPrice = AVG(价格) FROM 图书 WHERE 出版社编号 = @publisherId
PRINT '已增加一元,当前平均价格为:' + CAST(@avgPrice AS VARCHAR(10))
END
-- 步骤2:显示该出版社所有图书名称、价格
SELECT 书名, 价格 FROM 图书 WHERE 出版社编号 = @publisherId
-- 步骤3:若有书超过50元,取消上述操作
IF EXISTS (SELECT * FROM 图书 WHERE 出版社编号 = @publisherId AND 价格 > 50)
BEGIN
PRINT '有书籍价格超过50元,操作取消'
ROLLBACK
END
ELSE
BEGIN
-- 步骤4:提交事务并显示该出版社的图书价格
COMMIT
SELECT 价格 FROM 图书 WHERE 出版社编号 = @publisherId
END
```
需要注意的是,这里假设出版社编号为1,实际应用时需要根据实际情况修改。同时,这里使用了 PRINT 语句来显示增加价格的过程,实际应用时可以根据需要进行调整。
阅读全文