2014-02-13 27 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 

加任何你能想到的,并运行它孤立地看你的东西拿回来记录的其他临时调试标准。

一旦你发现你的问题,你可以恢复你的查询到原来的形式,与内部连接,你明显需要在这种情况下,部署到您的应用程序。

由于您比我们更熟悉您的模式和数据,这种方法分析可能会帮助您更快地得到答案。