目前,我正在尝试从SQL Server2008 R2实例(也是在SQL Server2012上测试的)查询Windows Search Service。Windows Search公开为OLE DB数据源,为我提供了几个查询搜索索引的选项。在SQL Server中配置新的链接服务器时,Management Studio为我提供了选择Microsoft OLE DB Provider进行搜索的选项,这意味着我应该能够从SQL Server连接到它。然而,事实证明,让它启动并运行起来是一个挑战。下面你会发现我偶然发现的错误信息。
链接服务器"TESTSERVER“的
OLE DB访问接口"Search.CollatorDSO”返回消息“未准备命令。”
消息7399,第16级,状态1,第2行
链接服务器"TESTSERVER“的OLE DB访问接口"Search.CollatorDSO”报告错误。命令未准备好。
Msg 7350,Level 16,State 2,Line 2
无法从链接服务器"TESTSERVER“的OLE DB访问接口"Search.CollatorDSO”获取列信息。
事情变得更有趣了。尽管链接服务器解决方案不起作用,但我能够将查询Windows Search的代码包装在一个CLR函数中(在SQL Server中成功使用MSDN: Querying the Index Programmatically和if。然而,这是不太可取的,因为设置它所需的步骤(部署库、配置权限等)。我已经尝试了几个参数设置,但都没有成功。我还尝试启用了一些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)".
奖励阅读
发布于 2017-05-12 21:22:54
Have a look at this code..It may help
USE [YourDB]
GO
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
Create PROC [dbo].[SearchAllTables]
@SearchStr nvarchar(100)
AS
BEGIN
DECLARE @dml nvarchar(max) = N''
IF OBJECT_ID('tempdb.dbo.#Results') IS NOT NULL DROP TABLE dbo.#Results
CREATE TABLE dbo.#Results
([tablename] nvarchar(100),
[ColumnName] nvarchar(100),
[Value] nvarchar(max))
SELECT @dml += ' SELECT ''' + s.name + '.' + t.name + ''' AS [tablename], ''' +
c.name + ''' AS [ColumnName], CAST(' + QUOTENAME(c.name) +
' AS nvarchar(max)) AS [Value] FROM ' + QUOTENAME(s.name) + '.' + QUOTENAME(t.name) +
' (NOLOCK) WHERE CAST(' + QUOTENAME(c.name) + ' AS nvarchar(max)) LIKE ' + '''%' + @SearchStr + '%'''
FROM sys.schemas s JOIN sys.tables t ON s.schema_id = t.schema_id
JOIN sys.columns c ON t.object_id = c.object_id
JOIN sys.types ty ON c.system_type_id = ty.system_type_id AND c .user_type_id = ty .user_type_id
WHERE t.is_ms_shipped = 0 AND ty.name NOT IN ('timestamp', 'image', 'sql_variant')
INSERT dbo.#Results
EXEC sp_executesql @dml
SELECT *
FROM dbo.#Results
END
https://stackoverflow.com/questions/22306325
复制相似问题