3

我正在尝试从几个不同的来源获取相同的信息,但在尝试使用 NotesSQL 和 SQL 2008 时遇到了困难。我想做的是从 Domino 服务器上的几个不同视图中检索信息。一个视图是默认视图,另一个是创建的视图。

我使用的一种方法是 Powershell,我在其中获取数据库,然后选择视图,获取第一个文档,然后遍历我需要的其余视图抓取字段。我选择的视图是人物视图。

我试图使用 SQL 2008 复制同样的东西,使用 NotesSQL 驱动程序,设置 ODBC 连接,然后创建到该 Notes 数据库的链接服务器。我正在使用以下查询从人员视图中进行选择:

select * from openquery(MyNotesServer,'Select * from People')

但是,当我使用 Powershell 并遍历该视图中返回的文档时,从该视图返回的内容不是我能够看到的。Powershell 在其中显示 100 多列,而 SQL 仅返回 5 列。此外,它们被命名为“_12”、“17”等。一些字段(可能是自定义的,我不知道)有一个有意义的名称。在显示的字段中,我可以按名称(“_12”等)选择它们,但不能选择其他任何内容。行数 (SQL) 与视图中的文档数 (Powershell $view.Allentries.Count) 相同。

查询已创建的视图(3 个字段):

select * from openquery(MyNotesServer,'Select * from MyCreatedView')

返回该视图中的所有字段,它们的名称与视图中的一样。

在 T-SQL 查询 People 视图中,您如何获得我在 Powershell 脚本中发现的我知道的列的名称?它们似乎没有被命名为相同的东西,那么当您select *从视图中返回的 5 之外,您如何检索?我已通读 Notes 文档和示例,但无法弄清楚映射到何处。

这背后的原因是希望利用 SQL 和 notes.id 文件而不是运行脚本。另外,我想利用已经存在的全局视图,而不是只有作者才能访问的视图。

4

2 回答 2

1

首先,在 Lotus Notes 文档中,当您阅读视图时会找到“列”,而不是字段。

其次,这些列配置了一个名为“Programmatic Name”的选项。在该选项中,您可以添加“别名”。Lotus Notes 默认将值设置为“$12”、“$17”等。问题是 NotesSQL 将“$”更改为“_”。这就是您看到“_12”、“_17”等的原因。

你怎么得到原来的名字?据我记得(我附近没有 Lotus Notes 进行验证)你不能。但是,您可以使用包含所需数据的列创建另一个视图,并输入适当的名称。最简单的方法是复制/粘贴视图,删除不需要的列,然后根据需要进行更改。

于 2013-03-15T04:32:31.917 回答
1

您可以使用select * from Person. Person 是表单名称,而不是视图名称。Notes 和 Domino 没有关系。NSF 文件是一个文档数据库。其中的视图是已经具有隐式选择的预构建索引。即,“人员”视图选择使用“人员”表单创建的所有文档。

上面的查询绕过了视图的使用,将为您提供使用 Person 表单创建的所有文档的所有字段。

实际上,仔细想想,更好的查询是select * from Person where type='Person'. 这是因为 Domino 中的“人物”视图在其选择公式中使用type="Person"而不是。form="Person"理论上可以使用 Person 表单创建文档,但 Type 字段设置为不同的值。这种变化将确保您始终获得您在“个人”视图中看到的相同列表。

但是: 无论哪种情况,它都是低效的。NotesSQL 驱动程序必须执行完整的数据库搜索,而不是简单地读取现有视图的索引。它将使用 Notes 公式 SELECT Form="Person" & Type="Person" 进行搜索。 我真的不建议这样做,除非您查询的是小型 Domino 目录数据库。

最佳实践是创建一个包含您真正需要的所有字段的视图,然后针对该视图进行查询。

于 2013-03-12T19:21:49.393 回答