我正在尝试从几个不同的来源获取相同的信息但是在尝试使用NotesSQL和SQL 2008时遇到了障碍。我想要做的是从Domino上的几个不同视图中检索信息服务器。一个视图是默认视图,另一个视图是创建的视图。
我使用的一种方法是Powershell,我获取数据库,然后选择视图,获取第一个文档&然后遍历我需要的其他视图抓取字段。我选择的视图是人视图。
我试图使用SQL 2008复制同样的东西,使用NotesSQL驱动程序,设置ODBC连接,然后创建到该Notes数据库的链接服务器。我使用以下查询从人员视图中进行选择:
select * from openquery(MyNotesServer,'Select * from People')
但是,当我使用Powershell&amp ;;时,从这个视图返回的内容并不是我能看到的。然后遍历该视图中返回的文档。 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文件而不是运行脚本。此外,我想使用已经存在的全局视图,而不是只能由其作者访问的视图。
答案 0 :(得分:1)
您可以使用select * from Person
。 Person是表单名称,而不是视图名称。 Notes和Domino不是关系型的。 NSF文件是文档数据库。其中的视图是已经具有隐式选择的预构建索引。即,“人物”视图选择使用“人物”表单创建的所有文档。
上述查询绕过了视图的使用,并为您提供了使用Person表单创建的所有文档的所有字段。
实际上,想一想,更好的查询是select * from Person where type='Person'
。这是因为Domino中的People视图在其选择公式中使用type="Person"
而不是form="Person"
。理论上可以使用Person表单创建文档,但将Type字段设置为不同的值。此变体将确保您始终获得在“人员”视图中看到的相同列表。
但是:在任何一种情况下,都会效率低下。 NotesSQL驱动程序必须执行完整的数据库搜索,而不是简单地读取现有视图的索引。它将使用Notes公式SELECT Form =“Person”& TYPE = “人”。 除非您查询小型Domino目录数据库,否则我真的不能推荐这个。
最佳做法是创建一个包含您真正需要的所有字段的视图,并针对该视图进行查询。
答案 1 :(得分:1)
首先,在Lotus Notes文档中,当您阅读有关视图而非字段时,您会找到“列”。
其次,列已配置了一个名为“Programmatic Name”的选项。在该选项中,您可以设置“别名”。 Lotus Notes默认将值设置为“$ 12”,“$ 17”等。事情是NotesSQL将“$”更改为“_”。这就是你看“_12”,“_ 17等等
的原因您如何获得原始名称?据我记得(我没有Lotus Notes附近进行验证)你不能。但是,您可以使用包含所需数据的列创建另一个视图,并添加适当的名称。简单的方法是复制/粘贴视图,删除不需要的列,并更改所需的列。