2012-10-17 23 views
0

此查詢爲何不起作用?依據子句排列的模糊列名稱錯誤

SELECT ROW_NUMBER() OVER (
     ORDER BY DocumentID 
     ) peta_rn 
    , d.DocumentID 
    , d.IsReEfiled 
    , d.IGroupID 
    , d.ITypeID 
    , d.RecordingDateTime 
    , dbo.GetLatestStatusDateTime(d.DocumentID) AS LatestStatusDatetime 
    , dbo.FnCanChangeDocumentStatus(d.DocumentStatusID, d.DocumentID) AS CanChangeStatus 
    , d.IDate 
    , d.InstrumentID 
    , d.DocumentStatusID 
    , ig.Abbreviation AS IGroupAbbreviation 
    , u.Username 
    , j.JDAbbreviation 
    , inf.DocumentName 
    , it.Abbreviation AS ITypeAbbreviation 
    , d.DocumentDate 
    , ds.Abbreviation AS DocumentStatusAbbreviation 
    , dbo.GetFlatDocumentName(d.DocumentID) AS FlatDocumentName 
FROM Documents d 
INNER JOIN IGroupes ig 
    ON d.IGroupID = ig.IGroupID 
LEFT JOIN ITypes it 
    ON d.ITypeID = it.ITypeID 
LEFT JOIN Users u 
    ON u.UserID = d.UserID 
LEFT JOIN DocumentStatuses ds 
    ON d.DocumentStatusID = ds.DocumentStatusID 
LEFT JOIN InstrumentFiles inf 
    ON d.DocumentID = inf.DocumentID 
INNER JOIN Jurisdictions j 
    ON j.JurisdictionID = d.JurisdictionID 
WHERE 1 = 1 

,而這一個工程:

SELECT ROW_NUMBER() OVER (
     ORDER BY d.DocumentID 
     ) peta_rn 
    , d.DocumentID 
    , d.IsReEfiled 
    , d.IGroupID 
    , d.ITypeID 
    , d.RecordingDateTime 
    , dbo.GetLatestStatusDateTime(d.DocumentID) AS LatestStatusDatetime 
    , dbo.FnCanChangeDocumentStatus(d.DocumentStatusID, d.DocumentID) AS CanChangeStatus 
    , d.IDate 
    , d.InstrumentID 
    , d.DocumentStatusID 
    , ig.Abbreviation AS IGroupAbbreviation 
    , u.Username 
    , j.JDAbbreviation 
    , inf.DocumentName 
    , it.Abbreviation AS ITypeAbbreviation 
    , d.DocumentDate 
    , ds.Abbreviation AS DocumentStatusAbbreviation 
    , dbo.GetFlatDocumentName(d.DocumentID) AS FlatDocumentName 
FROM Documents d 
INNER JOIN IGroupes ig 
    ON d.IGroupID = ig.IGroupID 
LEFT JOIN ITypes it 
    ON d.ITypeID = it.ITypeID 
LEFT JOIN Users u 
    ON u.UserID = d.UserID 
LEFT JOIN DocumentStatuses ds 
    ON d.DocumentStatusID = ds.DocumentStatusID 
LEFT JOIN InstrumentFiles inf 
    ON d.DocumentID = inf.DocumentID 
INNER JOIN Jurisdictions j 
    ON j.JurisdictionID = d.JurisdictionID 
WHERE 1 = 1 

正如你所看到的唯一的區別是我指定d.DocumentID。無論如何,我可以避免必須指定d.DocumentID,而不指定DocumentID而不使用額外的選擇?因爲畢竟,所有的documentID都指向相同的值。

+0

如果你發現不明確的列錯誤,我認爲它應該是特定列的概率存在於多個表中,DB服務器無法從特定表中檢索列顯示你應該指定tablename.column的名稱它應該工作。 – gks

回答

4

問題是DocumentIDInstrumentFilesDocuments這兩個表中,那麼查詢引擎如何知道您指的是哪一個?

所以總之,沒有,你必須在這個例子中指定d.DocumentID

2

你應該已經因爲多個表提供的別名d包含DocumentID。發動機會在哪裏(或哪個表)應該採取訂單。