SQL - 过程中的循环

问题描述 投票:0回答:1

我做了以下两个程序。一个是从视图中获取数据,另一个是要进行循环。由于某种原因,程序无法正常工作。 3小时后我取消了手术。 视图本身会在一分钟内获取数据。

你们中有人知道出了什么问题吗?

CREATE PROCEDURE GetShipData
    @shipCode NVARCHAR(50)
AS
BEGIN 
   
    WITH voyages AS
    (
        SELECT [vslCode], [voyNum], ... -- andere kolommen
        FROM [IceBerg].[MRV].[voyage_copy]
        WHERE vslCode = @shipCode
    ),
    schedule AS (
        SELECT ...
        FROM [IceBerg].[mrv].[vsched_copy] AS vc
        LEFT JOIN voyages ON voyages.vslCode = vc.ves_code
        WHERE vc.ves_code = @shipCode -- of wellicht 'vesselcode' afhankelijk van uw schema
    ),
    -- Other CTEs or subqueries
   
    -- Final Select

    SELECT * FROM ...
    -- Every vslcode in the query has been replaced by @shipcode
END

我又做了一个程序:

CREATE PROCEDURE PopulateNewEventsLogistic
AS
BEGIN
    DECLARE @vslCodes TABLE (vslCode NVARCHAR(50));
    INSERT INTO @vslCodes (vslCode) VALUES ('V018'), ('V019'), ('V020'); -- Voeg hier de gewenste vslCodes toe

    DECLARE @currentVslCode NVARCHAR(50);

    WHILE (SELECT COUNT(*) FROM @vslCodes) > 0
    BEGIN
        SELECT TOP 1 @currentVslCode = vslCode FROM @vslCodes;

        -- Execute GetShipData for current vslcode
        INSERT INTO MRV.new_events_logistic
        EXEC GetShipData @currentVslCode;

        DELETE FROM @vslCodes WHERE vslCode = @currentVslCode;
    END
END;

该视图是一个复杂的视图,有 20 个步骤。然而,只需一分钟即可获得 vslcode 的视图结果。然而手续花了3个小时,还没办完。

也许你们可以告诉我出了什么问题。

我尝试编写程序,但没有帮助

sql loops procedure
1个回答
0
投票

您可以在您的 DBMS 中执行此过程吗?如果是这样,请尝试使用 PRINT() 添加调试步骤,以查看程序是否卡住。您还可以在调用过程之前和之后使用 GETDATE() 并打印 DATEDIFF() 以查看循环内每个步骤需要多长时间。

我看不出代码有任何本质上的错误,会使其陷入循环。

© www.soinside.com 2019 - 2024. All rights reserved.