3

いくつかの異なるソースから同じ情報を取得しようとしていますが、NotesSQL と SQL 2008 を使用しようとして壁にぶつかりました。私がやろうとしているのは、Domino サーバーのいくつかの異なるビューから情報を取得することです。1 つのビューは既定のビューで、もう 1 つは作成されたビューです。

私が使用した方法の 1 つは Powershell です。ここでは、データベースを取得してビューを選択し、最初のドキュメントを取得してから、必要なフィールドを取得する残りのビューを反復処理します。私が選択したビューはPeopleビューです。

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')

そのビュー内のすべてのフィールドを返し、それらはビュー内にあるとおりに名前が付けられます。

People ビューを照会する T-SQL で、Powershell スクリプトで発見したように、そこにあることがわかっている列の名前をどのように取得しますか? それらは同じものに名前が付けられているようには見えませんselect *。Notes のドキュメントと例を読みましたが、何がどこにマッピングされているかわかりません。

この背後にある理由は、スクリプトを実行する代わりに SQL と notes.id ファイルを利用したいということです。また、作成者のみがアクセスできるビューではなく、既存のグローバル ビューを利用したいと考えています。

4

2 に答える 2

1

まず、Lotus Notes のドキュメントでは、ビューについて読むと、フィールドではなく「列」と出てきます。

次に、列には「プログラム名」というオプションが構成されています。そのオプションでは、「エイリアス」を入れることができます。Lotus Notes は、デフォルトで "$12"、"$17" などの値を設定します。問題は、NotesSQL が "$" を "_" に変更することです。これが、「_12」、「_17」などと表示される理由です。

元の名前はどのように取得しますか? 私が覚えている限りでは (検証を行うための Lotus Notes が近くにありません)、それはできません。ただし、必要なデータを含む列を含む別のビューを作成し、適切な名前を付けることができます。これを行う簡単な方法は、ビューをコピーして貼り付け、不要な列を削除し、必要に応じて変更することです。

于 2013-03-15T04:32:31.917 に答える
1

使用できますselect * from Person。Person はフォーム名であり、ビュー名ではありません。Notes と Domino はリレーショナルではありません。NSF ファイルは文書データベースです。その中のビューは、暗黙的な選択をすでに持っている事前構築済みのインデックスです。つまり、「People」ビューは、「Person」フォームで作成されたすべての文書を選択します。

上記のクエリは、ビューの使用をバイパスし、Person フォームで作成されたすべてのドキュメントのすべてのフィールドを提供します。

実際、考えてみると、より良いクエリはselect * from Person where type='Person'. これは、Domino の People ビューが選択式でtype="Person"代わりに使用するためです。form="Person"理論的には、Person フォームを使用してドキュメントを作成し、Type フィールドを別の値に設定することは可能です。このバリエーションにより、Person ビューに表示されるのと同じリストを常に取得できます。

しかし: どちらの場合も、非効率的です。NotesSQL ドライバーは、単に既存のビューのインデックスを読み取るのではなく、データベース全体を検索する必要があります。Notes 式 SELECT Form="Person" & Type="Person" を使用して検索します。 小さな Domino ディレクトリ データベースに対してクエリを実行する場合を除き、これはお勧めできません。

ベスト プラクティスは、本当に必要なすべてのフィールドを含むビューを作成し、そのビューに対してクエリを実行することです。

于 2013-03-12T19:21:49.393 に答える