我做了以下两个程序。一个是从视图中获取数据,另一个是要进行循环。由于某种原因,程序无法正常工作。 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个小时,还没办完。
也许你们可以告诉我出了什么问题。
我尝试编写程序,但没有帮助
您可以在您的 DBMS 中执行此过程吗?如果是这样,请尝试使用 PRINT() 添加调试步骤,以查看程序是否卡住。您还可以在调用过程之前和之后使用 GETDATE() 并打印 DATEDIFF() 以查看循环内每个步骤需要多长时间。
我看不出代码有任何本质上的错误,会使其陷入循环。