2011-03-24 142 views
0

我有一個在2005 SQL Server安裝中每天運行3次的選擇腳本,幾次返回表包含預期的行數但沒有任何值。整數和日期字段有零,其他的只是空白。SQL Server返回空字段

由於問題很少發生,因此無法在腳本運行時監督數據庫並且無法複製問題。我的想法是,數據庫中的其他更新導致了這個問題。有誰知道這個問題?

這裏是腳本

SELECT DISTINCT 
    URL.Line, 
    RTrim(URL.DescriptionNote) AS [DescriptionNote], 
    SA1.Name AS [Name1], 
    SP1.Designation AS [Designation1], 
    SA2.Name [Name2], 
    SP2.Designation AS [Designation2], 
    RL.DistanceMeters, 
    dbo.RouteLinkTransportModeDesc(URL.TransportModeTypeNumber) AS TransportMode, 
    URL.THM, 
    URL.FirstWorkedDate, 
    URL.LastWorkedDate 
FROM #RequiredRouteLink URL 
    INNER JOIN StopPoint AS SP1 
     ON SP1.JourneyPatternPointGid = URL.StartsAtPointGid 
    INNER JOIN StopArea AS SA1 
     ON SP1.IsPartOfStopAreaVersionId = SA1.VersionId 
    INNER JOIN StopPoint AS SP2 
     ON SP2.JourneyPatternPointGid = URL.EndsAtPointGid 
    INNER JOIN StopArea AS SA2 
     ON SP2.IsPartOfStopAreaVersionId = SA2.VersionId 
    LEFT JOIN verRouteLink AS RL 
     ON RL.StartsAtPointGid = URL.StartsAtPointGid 
    AND RL.EndsAtPointGid = URL.EndsAtPointGid 
    AND URL.TransportModeTypeNumber = RL.TransportModeTypeNumber 
WHERE URL.StartsAtPointGid <> URL.EndsAtPointGid 
    AND (RL.EndsAtPointGid IS NULL OR RL.DistanceMeters = 0 OR RL.DistanceMeters IS NULL) 
    AND RL.[DeletedDateTime] IS NULL 
ORDER BY FirstWorkedDate, THM, TransportMode, Line, DescriptionNote 

回答

1

,以減少跟蹤的負載我相信這是一個數據問題。你得到空白字段的原因很可能是LEFT JOIN

你有4 INNER JOIN s,其中任何一個都可能導致你有一個空的結果集。如果其中一個或多個沒有找到匹配項,則沒有結果。

然而,你LEFT JOIN意味着你將至少獲得URL.Line列表,這就是爲什麼你有最有可能行的預期數量。

+0

@user - 所有需要的都是在運行查詢以獲得「不良」結果的時間點上遇到問題之一。 – JNK 2011-03-24 15:20:46

+0

感謝您的回答!更改爲LEFT JOIN會給我所有列中的正確數據,但是有問題的表中的數據是正確的? – user613068 2011-03-24 15:36:23

+0

@user - 是的,但它也不會限制你的結果集。如果你正在使用'INNER JOIN'來限制你的結果在兩個表中匹配,'LEFT JOIN'不會這樣做。 – JNK 2011-03-24 15:37:56

1

可以運行低級別SQL跟蹤 - 過濾它儘可能[通過應用等如]