現在、SQL Server 2008 R2 インスタンス (SQL Server 2012 でもテスト済み) から Windows Search Service にクエリを実行しようとしています。Windows Search は OLE DB データソースとして公開されており、検索インデックスを照会するためのいくつかのオプションが提供されています。SQL Server で新しいリンク サーバーを構成するとき、Management Studio は、Microsoft OLE DB Provider for Search を選択するオプションを提供します。これは、SQL Server からそれに接続できる必要があることを意味します。ただし、これを起動して実行するのは難しいことがわかりました。以下に、私が見つけたエラーメッセージを示します。
リンク サーバー "TESTSERVER" の OLE DB プロバイダー "Search.CollatorDSO" から、"コマンドが準備されていません" というメッセージが返されました。
メッセージ 7399、レベル 16、状態 1、行 2
リンク サーバー "TESTSERVER" の OLE DB プロバイダー "Search.CollatorDSO" がエラーを報告しました。コマンドが準備されていません。
メッセージ 7350、レベル 16、状態 2、行 2
リンク サーバー "TESTSERVER" の OLE DB プロバイダー "Search.CollatorDSO" から列情報を取得できません。
物事はさらに面白くなります。リンク サーバー ソリューションは機能していませんが、Windows Search をクエリするコードを CLR 関数でラップし ( MSDN: プログラムによるインデックスのクエリを使用)、SQL Server 内で正常に使用できます。ただし、セットアップに必要な手順 (ライブラリのデプロイ、アクセス許可の構成など) のため、これはあまり望ましくありません。いくつかのパラメータ設定を試しましたが、うまくいきませんでした。また、プロバイダーをインプロセス サーバーとしてインスタンス化できるようにするなど、Search.CollatorDSO プロバイダー オプションの一部を有効にしてみました。私は現在、以下の設定を使用しています。セキュリティのために、ログインの現在のセキュリティ コンテキストを使用しています。
- プロバイダー:
Microsoft OLE DB Provider for Search
- 情報源:
(local)
- プロバイダー文字列:
Provider=Search.CollatorDSO.1;EXTENDED?PROPERTIES="Application=Windows"
- 位置:
-
さらに、ネットワーク ドライブを検索する必要があります。これは、共有 Windows ライブラリを使用して行うことができますか?
ここ数年、この問題に苦しんでいる人が増えていることは承知しています。誰かがこれを起動して実行できたのか、それとも私を正しい方向に向けることができたのか疑問に思っています.
OLEDBワークス
通常の ADO/OLEDB コンポーネントは、接続文字列を使用して Windows Search サービスにクエリを実行できます。
provider=Search.CollatorDSO.1;EXTENDED PROPERTIES="Application=Windows"
クエリの例:
SELECT TOP 100000 "System.ItemName",
"System.ItemNameDisplay",
"System.ItemType",
"System.ItemTypeText",
"System.Search.EntryID",
"System.Search.GatherTime",
"System.Search.HitCount",
"System.Search.Store",
"System.ItemUrl",
"System.Filename",
"System.FileExtension",
"System.ItemFolderPathDisplay",
"System.ItemPathDisplay",
"System.DateModified",
"System.ContentType",
"System.ApplicationName",
"System.KindText",
"System.ParsingName",
"System.SFGAOFlags",
"System.Size",
"System.ThumbnailCacheId"
FROM "SystemIndex"
WHERE CONTAINS(*,'"Contoso*"',1033)
次のコマンドを実行して、SQL Server Management Studio の SQL Server で直接クエリを試すことができます。
SELECT *
FROM OPENROWSET(
'Search.CollatorDSO',
'Application=Windows',
'SELECT TOP 100 "System.ItemName", "System.FileName" FROM SystemIndex');
エラーが発生します:
OLE DB provider "Search.CollatorDSO" for linked server "(null)" returned message "Command was not prepared.".
Msg 7399, Level 16, State 1, Line 1
The OLE DB provider "Search.CollatorDSO" for linked server "(null)" reported an error. Command was not prepared.
Msg 7350, Level 16, State 2, Line 1
Cannot get the column information from OLE DB provider "Search.CollatorDSO" for linked server "(null)".
ボーナスリーディング
- リンク サーバーを使用して SQL Server から Windows Search に接続する (2011 年 1 月)
- SQL Serverとの連携 (2008年5月~2012年12月)
- SQL Server から Windows Search にアクセスしようとする: アピール (2007 年 7 月)
- SQL Server 2008 から Windows Search を呼び出す (2011 年 3 月)
- OLE DB プロバイダー "Search.CollatorDSO" が "コマンドが準備されていません" を返す (2014 年 4 月 - CLR の回避策を提案)
- サーバーと Windows Search のリンク (2011 年 2 月)
- MSDN ブログ: Search.CollatorDSO プロバイダーを使用すると、Microsoft の検索結果を読み取るための SYSTEMINDEX へのクエリが失敗する ( 2009 年 8 月- CLR の回避策を提案)
- Vista 検索 ( 2007 年 2 月)