Montag, 8. Oktober 2007

Verknüpfte Abfragen SQL-Server - Index Server


Es soll eine Abfrage ausgeführt werden, die Daten aus der Datenbank und Dateien durchsucht. Es gibt sicher ne Menge Möglichkeiten, das zu realisieren. Ich hab mich für folgende entschieden und finde sie ziemlich elegant:

Die Abfrage des Dateiinhaltes übernimmt der in Windows Server integrierte Index Service (oder Index Server). Dieser kann auf verschiedene Art und Weise abgefragt werden z.B. über eine Web-Oberfläche und über ADO.
Man kann den Index Server auch als Verbindungsserver im SQL Server registrieren und so SQL-Queries mit Index-Server Queries kombinieren! Genauso hab ichs dann auch gemacht:

Zunächst muss man die Registrierung durchführen:

EXEC sp_addlinkedserver '[Servername]', '', 'MSIDXS', 'Web', NULL, NULL

Wobei [Servername] logischerweise der Name des Server ist, auf dem der Indexservice läuft. Web ist der Name des Katalogs, der heisst standardmäßig Web, wenn Ihr keinen neuen angelegt oder denh Alten umbenannt habt. MSIDX ist der Name des Dienstes.

Dann könnt Ihr schon loslegen, je nachdem wie die Berechtigungen bei euch aussehen:

DECLARE @strSQL as nvarchar(400)

SELECT @strSQL= 'select FileName, path, size, vpath from scope() where contains
('SELECT @strSQL=@strSQL +CHAR(39)+ CHAR(39)+ [Suchbegriff] + CHAR(39)+ CHAR(39)+')'

SELECT @strSQL='SELECT * FROM
OPENQUERY([Servername],'+ CHAR(39) + @strSQL + CHAR(39) +')
EXEC sp_executesql @statement = @strSQL

Wenn Ihr, wie ich, eine kombinierte Abfrage über Daten und Dateien durchführen wollt, könnt Ihr natürlich auch einen JOIN über beide Server durchführen, eine entsprechende Spalte vorrausgesetzt. Bei mir ist das der Dateiname.

Für mehr Details, empfehle ich diesen Thread bei Google Groups, aus dem ich auch meine Infos hab. Dort steht auch, wie man ggf. einen Login für den Verbindungsserver erstellt.