Ich benutze SQL-Server 2014 und verwende dort die Volltextsuche und Filestream.
Nun finde ich in Excel-Dateien nicht alle Suchtexte, die aber garantiert in diesen Files vorhanden sind.
In meinem Beispiel benutze ich 17 Begriffe nämlich die folgenden:
Daheim Lieferservice GmbH
Arbeiterwohlfahrt Bundesverband e.V.
Augenarztpraxis Milchmann
ABC-Pflegedienst
Sunset Solar KG
Flitzer Verkehrsgesellschaft mbH
Autohaus Knusper GmbH
Bezirksamt Weltende
Kamm Elektrotechnik GmbH
Eschsauer Solarstromsysteme GmbH
Deutsche Bahn
Hamburg Tourismus GmbH
Wohnbau GmbH
Universitätsklinikum Hamburg
Tchibo Deutschland GmbH
Schornsteinfegermeister Mingsdorf
Vollkornbäckerei Erntefrisch
Diese habe ich in einem Excel, einem Excel2003, einem Word und einem normalen Textfile abgelegt.
Die Files liegen auf dem Server unter:
D:\TEMP\Found_In_Excel.xlsx
D:\TEMP\Found_In_Excel_2003.xls
D:\TEMP\Found_In_Word.docx
D:\TEMP\Found_In_Text.txt
Nun habe ich folgenden Code:
USE TEST_DB
set NOCOUNT ON
GO
--------------------------
-- Tabelle [MyFileTable]:
--------------------------
if exists (select * from sys.tables where name = 'MyFileTable')
DROP TABLE [dbo].MyFileTable
GO
CREATE TABLE [dbo].MyFileTable
(
NUM int IDENTITY(1,1) NOT NULL,
GID UNIQUEIDENTIFIER ROWGUIDCOL NOT NULL UNIQUE CONSTRAINT DF_FileTable_GID DEFAULT (newid()),
FileData VARBINARY(MAX) FILESTREAM NOT NULL, -- Document Binary Large Object
FileExtension nvarchar (8) NOT NULL, -- Extension
FullFileName varchar (200) NOT NULL -- Dateiname.Extension
CONSTRAINT [PK_FileTable_NUM] PRIMARY KEY CLUSTERED (NUM) on [PRIMARY]
) ON [PRIMARY]
GO
CREATE FULLTEXT INDEX ON dbo.MyFileTable(FileData TYPE COLUMN FileExtension LANGUAGE German STATISTICAL_SEMANTICS)
KEY INDEX PK_FileTable_NUM
WITH STOPLIST = [GermanStopList];
GO
insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
(SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Excel.xlsx', SINGLE_BLOB) as ExternalFile),
'.xlsx',
'Found_In_Excel.xlsx'
insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
(SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Excel_2003.xls', SINGLE_BLOB) as ExternalFile),
'.xls',
'Found_In_Excel_2003.xls'
insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
(SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Word.docx', SINGLE_BLOB) as ExternalFile),
'.docx',
'Found_In_Word.docx'
GO
insert into MyFileTable ( FileData, FileExtension, FullFileName)
Select
(SELECT BulkColumn FROM OPENROWSET( BULK 'D:\TEMP\Found_In_Text.txt', SINGLE_BLOB) as ExternalFile),
'.txt',
'Found_In_Text.txt'
GO
PRINT 'Wait Start'
GO
WAITFOR DELAY '00:00:05';
PRINT 'Wait End'
GO
DECLARE
@TestDaten TABLE (NAME varchar (200) NOT NULL, ERGEBNIS varchar (200) NULL);
insert into @TestDaten (NAME) VALUES ( 'Daheim Lieferservice GmbH' ),
( 'Arbeiterwohlfahrt Bundesverband
e.V.' ),
( 'Augenarztpraxis Milchmann' ),
( 'ABC-Pflegedienst' ),
( 'Sunset Solar KG' ),
( 'Flitzer Verkehrsgesellschaft mbH'
),
( 'Autohaus Knusper GmbH' ),
( 'Bezirksamt Weltende' ),
( 'Kamm Elektrotechnik GmbH' ),
( 'Eschsauer Solarstromsysteme GmbH'
),
( 'Deutsche Bahn' ),
( 'Hamburg Tourismus GmbH' ),
( 'Wohnbau GmbH' ),
( 'Universitätsklinikum Hamburg' ),
( 'Tchibo Deutschland GmbH' ),
( 'Schornsteinfegermeister Mingsdorf'
),
( 'Vollkornbäckerei Erntefrisch' )
DECLARE crs_Test CURSOR FOR
select NAME from @TestDaten;
declare @name varchar (200),
@Suchtext varchar (200),
@Ergebnis varchar (200),
@length int;
OPEN crs_Test
WHILE ( 1 = 1 )
BEGIN
FETCH crs_Test INTO @name;
IF @@fetch_status <> 0
BREAK;
set @Ergebnis = '';
SET @Suchtext = '"' + @name + '"';
select @Ergebnis = @Ergebnis + isnull (FullFileName, '') + ' / ' from MyFileTable
WHERE CONTAINS(FileData, @Suchtext);
set @length = len (@Ergebnis);
if (@length > 3)
SET @Ergebnis = substring (@Ergebnis, 1, @length - 2);
update @TestDaten set ERGEBNIS = @Ergebnis where NAME = @name;
END
CLOSE crs_Test;
select * from @TestDaten
set NOCOUNT OFF
GO
Ergebnis:
NAME ERGEBNIS
Daheim Lieferservice GmbH Found_In_Word.docx / Found_In_Text.txt
Arbeiterwohlfahrt Bundesverband e.V. Found_In_Word.docx / Found_In_Text.txt
Augenarztpraxis Milchmann Found_In_Word.docx / Found_In_Text.txt
ABC-Pflegedienst Found_In_Word.docx / Found_In_Text.txt
Sunset Solar KG Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Flitzer Verkehrsgesellschaft mbH Found_In_Word.docx / Found_In_Text.txt
Autohaus Knusper GmbH Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Bezirksamt Weltende Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Kamm Elektrotechnik GmbH Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Eschsauer Solarstromsysteme GmbH Found_In_Word.docx / Found_In_Text.txt
Deutsche Bahn Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Hamburg Tourismus GmbH Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Wohnbau GmbH Found_In_Excel.xlsx / Found_In_Excel_2003.xls / Found_In_Word.docx / Found_In_Text.txt
Universitätsklinikum Hamburg Found_In_Word.docx / Found_In_Text.txt
Tchibo Deutschland GmbH Found_In_Word.docx / Found_In_Text.txt
Schornsteinfegermeister Mingsdorf Found_In_Word.docx / Found_In_Text.txt
Vollkornbäckerei Erntefrisch Found_In_Word.docx / Found_In_Text.txt
Das heißt in Word und im Text-File wird alles gefunden, in den Excel-Files aber nur 7 von 17 mal.
Hat jemand eine Erklärung dafür, oder ist das ein Bug?