【发布时间】:2021-09-09 07:25:59
【问题描述】:
我有这些表:
- 汽车(CarID、品牌、Buyprice、YearManufacture、颜色)
- 客户(ClientId、姓名、地址、薪水)
- 供应商(供应商 ID、名称)
- 销售(CarID、ClientID、VendorID、SaleDate、SalePrice)
我必须编写一个显示所有汽车的程序。如果汽车是“Mercedes”类型,请显示其购买价格以及是否已售出。
这是我的代码:
CREATE PROCEDURE PD
AS
BEGIN
DECLARE Crs CURSOR FOR
SELECT CarID, brand, Buyprice
FROM Car;
DECLARE @Carid INT;
DECLARE @Type varchar (100);
DECLARE @Price INT;
DECLARE @N INT;
OPEN Crs;
FETCH Crs INTO @Carid, @Type, @Price;
WHILE @@Fetch_status = 0
IF @Type = 'MERCEDES'
BEGIN
PRINT @Price;
SELECT @N = COUNT(*)
FROM Sale
WHERE CarID = @Carid;
IF @N > 0
BEGIN
PRINT 'Car already sold');
ELSE
PRINT 'Car is sold');
END
END
END;
CLOSE Crs;
DEALLOCATE Crs;
END;
是正确的,还是我遗漏了什么?
【问题讨论】:
-
您需要为所有
declare指定数据类型。示例DECLARE @Carid INT -
啊,是的,我忘记了
-
不要使用
SELECT * FROM,明确指定你需要的列,这样更不容易出错。就像在您的查询中一样,您有SELECT * FROM CAR,它将返回CAR表中的所有 5 列。但是您在FETCH Crs INTO中只指定了 3 个变量 -
我应该添加更多变量还是只选择 3 个属性 ID、品牌、价格,因为他说显示所有汽车可能意味着 *
-
您应该将
select *更改为select CarID, brand, Buyprice。明确指定您需要的列总是比使用*更好。所以不要添加更多你没有使用的变量。您的存储过程中还有一些语法错误,我建议您掌握一个 SQL Server,在那里输入查询并尝试执行它
标签: sql sql-server database stored-procedures cursor