2014-02-13 55 views
1

我嘗試在安裝了WSUS數據庫的MSSQL 2005 Express服務器上執行搜索。我想爲當前版本的更新獲取文件名和摘要值。這是我想運行查詢:NVARCHAR在加入後顯示爲「Binary 0」

SELECT 
    * 
FROM 
    tbRevision as rev 
    join tbLocalizedPropertyForRevision as lpfr on lpfr.RevisionID = rev.RevisionID 
    join tbLocalizedProperty as lp on lp.LocalizedPropertyID = lpfr.LocalizedPropertyID 
    join tbFileForRevision as ffr on rev.RevisionID = ffr.RevisionID 
WHERE 
    lpfr.LanguageID = 1033 and 
    rev.IsLatestRevision = 1 and 
    rev.IsBeta = 0 and 
    lp.Title like '%931125%'; 

的問題是,這個查詢會發現什麼,雖然也有與他們KB一些修改意見。如果我從查詢中刪除最後一條連接線join tbFileForRevision as ffr on rev.RevisionID = ffr.RevisionID,我會返回所有結果。

想知道什麼是錯的,我開始從另一個側面一個新的查詢,已經知道文件名:

SELECT 
    * 
FROM 
    tbLocalizedPropertyForRevision as lpfr 
    join tbRevision as r on r.RevisionID = lpfr.RevisionID 
    join tbFileForRevision as ffr on ffr.RevisionID = r.RevisionID 
    join tbFile as f on f.FileDigest = ffr.FileDigest 
    join tbLocalizedProperty as lp on lp.LocalizedPropertyID = lpfr.LocalizedPropertyID 
WHERE 
    f.FileName like '%rootsupd%' 

此ResultSet領域Title始終是「二進制0」和DescriptionReleaseNotes總是充滿與NULL,雖然LocalizedPropertyID填寫正確,並匹配LocalizedPropertyIDtbLocalizedPropertyForRevisiontbLocalizedPropertyForRevision

是我的查詢如此關閉?我做錯了什麼?如果您需要更多關於架構的詳細信息,我很樂意提供。

編輯︰鏈接到SUSDB Diagram如果你需要它在另一種格式,告訴我如何提供它。許多使用Microsoft軟件的公司都有WSUS,也許你可以自己訪問該服務器。

+0

請提供表格模式和所需的結果。您可能已添加的內部連接需要更正。 – Deepshikha

回答

1

調試時多加入大多數的表是WHERE子句的一部分查詢,它幫助我打破了查詢到的部分,我可以單獨測試,像這樣:

SELECT * 
FROM 
    tbRevision as rev 
    left join (
     select * 
     from tbLocalizedPropertyForRevision as lpfr 
     where lpfr.LanguageID = 1033 
    ) as lpfr 
     on lpfr.RevisionID = rev.RevisionID 
    left join (
     select * 
     from tbLocalizedProperty as lp 
     where lp.Title like '%931125%' 
    ) as lp 
     on lp.LocalizedPropertyID = lpfr.LocalizedPropertyID 
    left join (
     select * 
     from tbFileForRevision 
    ) as ffr 
     on rev.RevisionID = ffr.RevisionID 
WHERE 
    rev.IsLatestRevision = 1 and 
    rev.IsBeta = 0 

運行以上會給我所有符合rev表標準的記錄。 (左邊的加入確保我得到了一切。)

然後我可以將連接更改爲lpfr回到內部連接並查看我得到的記錄數。

然後我會改變這種加入回left join,並在最底部添加到WHERE條款:

and lpfr.LanguageID = Is Null 

告訴我缺什麼,我可能不希望會丟失。

這種方法的好處是,你可以突出顯示特定的代碼塊:

select * 
    from tbLocalizedPropertyForRevision as lpfr 
    where lpfr.LanguageID = 1033 

加任何你能想到的,並運行它孤立地看你的東西拿回來記錄的其他臨時調試標準。

一旦你發現你的問題,你可以恢復你的查詢到原來的形式,與內部連接,你明顯需要在這種情況下,部署到您的應用程序。

由於您比我們更熟悉您的模式和數據,這種方法分析可能會幫助您更快地得到答案。