2013-03-12 2 views
2

두 개의 다른 소스에서 동일한 정보를 얻으려고 노력하고 있지만 NotesSQL 및 SQL 2008을 사용하려고 할 때 벽을 치고 있습니다. 내가하려는 것은 검색하는 것입니다. 정보를 Domino 서버의 몇 가지 다른보기에서 가져옵니다. 하나의보기는 기본보기이고 다른보기는 작성된보기입니다.Lotus Domino NotesSQL ODBC 및 SQL 2008 쿼리

내가 사용한 한 가지 방법은 Powershell입니다. 데이터베이스를 가져온 다음보기를 선택하고 첫 번째 문서 &을 얻은 다음 필자가 필요로하는 나머지보기를 반복합니다. 내가 선택한보기는 사람들입니다.

SQL 2008을 사용하여 NotesSQL 드라이버를 사용하고 ODBC 연결을 설정 한 다음 해당 Notes 데이터베이스에 연결된 서버를 만드는 것과 동일한 작업을 복제하려고했습니다. 나는 사람들에서 선택하려면 다음 쿼리를 사용하고 볼 :

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

그러나 어떤이보기에서 반환되는 것은 내가 문서가 그 반환을 통해 다음 반복 파워 쉘 & 사용할 때 볼 수 있어요 것이 아니다 전망. Powershell은 100 개 이상의 열을 표시하지만 SQL은 5 개의 열만 반환합니다. 또한 이름은 "_12", "17"등입니다. 일부 필드 (사용자 정의 일 수도 있음)는 의미있는 이름입니다. 표시된 필드 중 이름 ("_12"등)로 선택할 수 있지만 다른 것은 선택할 수 없습니다. 행 수 (SQL)는보기의 문서 수 (Powershell $view.Allentries.Count)와 같습니다.

생성 된 뷰 (3 개 분야) 조회 : 그보기

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

반환 모든 필드를, 그들이보기에 명명되었다.

사람들보기를 쿼리하는 T-SQL에서 PowerShell 스크립트에서 발견 한대로 내가 알고있는 열의 이름을 어떻게 얻을 수 있습니까? 그들은 똑같은 이름이 붙어있는 것처럼 보이지 않으므로, select *보기에서 리턴 된 5 개 이상을 어떻게 검색합니까? Notes 설명서 & 예제를 읽었지 만 매핑 된 것이 무엇인지 파악할 수 없었습니다.

이 이유는 스크립트를 실행하는 대신 SQL & notes.id 파일을 사용하려는 이유입니다. 또한 필자 만이 볼 수있는보기 대신 기존의 전역보기를 사용하고 싶습니다.

+0

이것이 Domino 디렉토리입니까? 그렇다면 약간 왼쪽 필드 제안으로 Domino 서버에서 LDAP를 활성화하지 않는 이유는 무엇입니까? LDAP 공급자를 사용하여 연결된 서버 연결을 만들 수도 있습니다. 난 당신이 SQL 서버에 광고에 연결 알아 – booyaa

답변

1

select * from Person을 사용할 수 있습니다. 사람은보기 이름이 아닌 양식 이름입니다. Notes와 Domino는 관계형이 아닙니다. NSF 파일은 문서 데이터베이스입니다. 이 뷰는 이미 암시 적으로 선택되어있는 사전 빌드 된 인덱스입니다. 즉, "사람"보기는 "사람"양식으로 작성된 모든 문서를 선택합니다.

위의 쿼리는보기의 사용을 무시하고 사용자 양식으로 작성된 모든 문서의 모든 필드를 제공합니다.

사실, 생각해 보면 더 좋은 검색어는 select * from Person where type='Person'이됩니다. Domino의 People 뷰는 선택 수식에 form="Person" 대신 type="Person"을 사용하기 때문입니다. 이론적으로 Person 양식으로 작성되었지만 Type 필드가 다른 값으로 설정된 문서를 가질 수 있습니다. 이 변형은 사용자보기에서 볼 수있는 것과 동일한 목록을 항상 얻을 수 있도록합니다.

but : 두 경우 모두 비효율적입니다.NotesSQL 드라이버는 기존보기의 색인을 읽는 대신 전체 데이터베이스 검색을 수행해야합니다. Notes 수식을 사용하여 검색 할 것입니다. SELECT Form = "Person"& Type = "Person". 작은 Domino 디렉토리 데이터베이스에 대해 쿼리하는 경우가 아니면을 정말로 추천 할 수 없습니다.

정말 필요한 모든 필드가 포함 된보기를 만들어 해당보기에 대해 쿼리하는 것이 가장 좋습니다.

+0

나는 당신과 마리오가 명시된 모두 알아 내고 있습니다. 여전히 시도하지만, Person 쿼리 (선택 *에서 Pe rson). 그것을 Openquery 명령 내에서 사용합니다. 하지만 계속해서 돌아 오는 것은 연결된 서버가 "[Lotus] [ODBC Lotus Notes] 프로그램 유형이 범위를 벗어남"메시지를 반환하는 것입니다. SQL 메시지는 7330이며 연결된 서버의 OLE DB 공급자 "MSDASQL"에서 행을 가져올 수 없다고 말합니다. –

+0

이 http://support.microsoft.com/kb/238774를 읽었을 때 데이터 유형 문제 일 수있는 것으로 보입니다. *를 선택하려고하십니까? 또는 정말로 필요한 특정 항목 만 선택하더라도이 문제가 발생합니까? –

1

먼저 Lotus Notes 문서에서 필드가 아닌보기를 읽을 때 "열"을 찾을 수 있습니다.

둘째, 열은 "프로그램 이름"이라는 옵션을 구성했습니다. 이 옵션에서 "별칭"을 넣을 수 있습니다. Lotus Notes는 기본적으로 값을 "$ 12", "$ 17"등으로 지정합니다. NotesSQL은 "_"로 "$"를 변경합니다. 그게 바로 "_12", "_17"등이 표시되는 이유입니다.

원래 이름은 어떻게 구합니까? (기억하기에 Lotus Notes를 거의 사용하지 않음) 필요한 데이터가있는 열을 사용하여 다른보기를 만들고 알맞은 이름을 넣을 수 있습니다. 쉽게 할 수있는 방법은보기 복사/붙여 넣기, 필요하지 않은 열 삭제 및 원하는 변경입니다.