写程序,光标显示汽车
Write a Procedure, cursor to display cars
我有这些表:
- 汽车(CarID、品牌、购买价格、制造年份、颜色)
- 客户(ClientId、姓名、地址、薪水)
- 供应商(VendorID,名称)
- 销售(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;
是否正确,还是我遗漏了什么?
我根本不明白你为什么要在这里使用游标,这应该只是一个连接查询。
几乎没有光标是正确答案的情况。它们速度慢、效率低,而且只在非常特殊的情况下才有用,比如根据系统表执行DDL。
你想要这样的联合查询
SELECT
c.CarID,
c.Brand,
c.Buyprice,
NumOfSales = COUNT(s.CarId)
FROM Car c
LEFT JOIN Sale s ON s.CarId = c.CarId
WHERE c.Brand = 'MERCEDES'
GROUP BY
c.CarID,
c.Brand,
c.Buyprice;
请注意 LEFT JOIN
而不是 INNER JOIN
,即使 Sale
.
中没有结果,它也会从 Car
中获取结果
我有这些表:
- 汽车(CarID、品牌、购买价格、制造年份、颜色)
- 客户(ClientId、姓名、地址、薪水)
- 供应商(VendorID,名称)
- 销售(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;
是否正确,还是我遗漏了什么?
我根本不明白你为什么要在这里使用游标,这应该只是一个连接查询。
几乎没有光标是正确答案的情况。它们速度慢、效率低,而且只在非常特殊的情况下才有用,比如根据系统表执行DDL。
你想要这样的联合查询
SELECT
c.CarID,
c.Brand,
c.Buyprice,
NumOfSales = COUNT(s.CarId)
FROM Car c
LEFT JOIN Sale s ON s.CarId = c.CarId
WHERE c.Brand = 'MERCEDES'
GROUP BY
c.CarID,
c.Brand,
c.Buyprice;
请注意 LEFT JOIN
而不是 INNER JOIN
,即使 Sale
.
Car
中获取结果