写程序,光标显示汽车

Write a Procedure, cursor to display cars

我有这些表:

我必须编写一个显示所有汽车的程序。如果汽车是 '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 中获取结果