Búsqueda de texto completo mediante el servicio de búsqueda de Windows y SQL Server 2008 R2
sql-server-2008-r2 oledb (1)
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
Actualmente estoy intentando consultar el servicio de búsqueda de Windows desde una instancia de SQL Server 2008 R2 (también probado en SQL Server 2012). La búsqueda de Windows se expone como una fuente de datos OLE DB, lo que me brinda varias opciones para consultar el índice de búsqueda. Al configurar un nuevo servidor vinculado en SQL Server, Management Studio me da la opción de seleccionar el Proveedor Microsoft OLE DB para la búsqueda, lo que implica que debería poder conectarme desde SQL Server. Sin embargo, resulta ser un reto poner esto en marcha. A continuación encontrará el mensaje de error que encontré.
El proveedor OLE DB "Search.CollatorDSO" para el servidor vinculado "TESTSERVER" devolvió el mensaje "El comando no se preparó".
Msg 7399, Nivel 16, Estado 1, Línea 2
El proveedor OLE DB "Search.CollatorDSO" para el servidor vinculado "TESTSERVER" informó un error. El comando no estaba preparado.
Msg 7350, Nivel 16, Estado 2, Línea 2
No se puede obtener la información de la columna del proveedor OLE DB "Search.CollatorDSO" para el servidor vinculado "TESTSERVER".
Las cosas se ponen aún más interesantes. Aunque la solución del servidor vinculado no funciona, puedo ajustar el código que consulta la búsqueda de Windows en una función CLR (usando MSDN: consultar el índice mediante programación ) y usarlo correctamente dentro de SQL Server. Sin embargo, esto es menos deseable, debido a los pasos necesarios para configurarlo (implementar la biblioteca, configurar permisos, etc.). He intentado varios ajustes de parámetros, sin suerte. También he intentado habilitar algunas de las opciones del proveedor Search.CollatorDSO, como permitir que se cree una instancia del proveedor como un servidor en proceso. Actualmente estoy usando la configuración de abajo. Por seguridad estoy usando el contexto de seguridad actual del inicio de sesión.
- Proveedor: Proveedor
Microsoft OLE DB Provider for Search
- Fuente de datos:
(local)
- Cadena del proveedor:
Provider=Search.CollatorDSO.1;EXTENDED?PROPERTIES="Application=Windows"
- Ubicación:
-
Además, necesito buscar unidades de red, ¿se puede hacer esto utilizando bibliotecas compartidas de Windows?
Soy consciente de que más personas han estado luchando con este problema en los últimos años. Me pregunto si alguien ha podido poner esto en funcionamiento o podría indicarme la dirección correcta.
OLEDB trabaja
Los componentes normales de ADO / OLEDB pueden consultar el servicio de búsqueda de Windows con la cadena de conexión:
provider=Search.CollatorDSO.1;EXTENDED PROPERTIES="Application=Windows"
Y una consulta de ejemplo:
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)
Puede intentar la consulta directamente en SQL Server en SQL Server Management Studio intentando ejecutar:
SELECT *
FROM OPENROWSET(
''Search.CollatorDSO'',
''Application=Windows'',
''SELECT TOP 100 "System.ItemName", "System.FileName" FROM SystemIndex'');
Lo que da los errores:
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)".
Lectura de bonos
- Conéctese a la búsqueda de Windows desde SQL Server usando un servidor vinculado (enero de 2011)
- Enlace con SQL Server (mayo 2008 - diciembre 2012)
- Intentando acceder a Windows Search desde SQL Server: una apelación (julio de 2007)
- Llamando a Windows Search desde SQL Server 2008 (marzo de 2011)
- El proveedor de OLE DB "Search.CollatorDSO" devuelve "El comando no se preparó" (abril de 2014: sugiere una solución alternativa de CLR)
- Servidor vinculado a la búsqueda de Windows (febrero de 2011)
- MSDN Blogs: la consulta al SYSTEMINDEX para leer los resultados de búsqueda de Microsoft falla cuando se usa el proveedor Search.CollatorDSO ( agosto de 2009 : sugiere una solución alternativa de CLR)
- Vista Search ( Febrero 2007 )