ALTER PROCEDURE [dbo].[DokumentErfassen]
-- Add the parameters for the stored procedure here
@Auftrag int = 0, -- Verweis auf den Auftrag
@Dateiname nvarchar(255) , -- der Dateinmae, der später im FileTable verwendet wird
@SourceFileAndPath nvarchar(255), -- Pfad zur Quelldatei
@Dokumententyp int,
@subject nvarchar(255) =N'--- DEFAULT ---', --Ein Freitext, der die Datei beschreibt,
@delete_source_file bit=0
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
DECLARE @SQL nvarchar(MAX);
DECLARE @streamid uniqueidentifier -- hier wird die streaiming-ID zurückgegeben
DECLARE @filetable_destname nvarchar(MAX); -- der neue Dateiname ...
DECLARE @is_Rechnung bit;
DECLARE @is_Gutachtendatei bit;
Der Titel ist sicherlich nicht sonderlich gelungen. Daher zunächst mal die Problembeschreibung.
Meine Datenbank enthält eine FileTable namens DATEISPEICHER.
Die ursprüngliche Variante meines Codes nimmt (gescannte) PDFs aus einem Verzeichnis und kopiert diese mit untenstehendem Code in die Filetable mit untenstehendem Code (Fragmente). Der Code ist so in etwa an vielen STellen im Netz zu finden.
Es handelt sich um gescannte medizinische Befunde, die einem Fall zugeordnet werden sollen.
Jüngst wurde der Scanvorgang um einen Durchlauf für Texterkennung ergänzt. Die PDFs sind also jetzt nach Texten durchsuchbar. Was also liegt näher als die PDFs in einem Unterverzeichnis des Filetable abzulegen damit es dort volltext-indiziert wird ? Das geht auch ganz gut.
Die zum Filetable gehörige Freigabe enthält also ein Unterverzeichnis namens inbox. Dort werden die PDFs vom Scanner hinkopiert.
Ich versuche jetzt mit dem ursprünglichen Code die Quelldatei zu öffnen und als neuen Datensatz in die Filetable zu kopieren. Faktisch muss die Datei dabei nur verschoben werden.
Leider kommt es zu einer Fehlermeldung.
[Microsoft][SQL Server Native Client 11.0][SQL Server]Das Massenladen ist nicht möglich, da die Datei '\\Galileo2010\mssqlserver\FileTable\DATEISPEICHER\inbox\18319_j1.pdf' nicht geöffnet werden konnte. Betriebssystemfehlercode 50(Die Anforderung wird nicht unterstützt.).
Was auch immer das heisst!
Hat jemand eine Idee?
BEGIN TRY
BEGIN TRANSACTION Erfassung;
-- als erstes den SQL-String zusammenbauen
SET @SQL='INSERT INTO dbo.DATEISPEICHER (name, file_stream)
(SELECT '''+@Dateiname + ''', * FROM OPENROWSET(BULK N'''+@SourceFileAndPath +''', SINGLE_BLOB) AS FileData)';
-- jetzt den gerade generierten T-SQL-Code ausführen
EXEC sp_executesql @SQL;
-- Die stream_id ermitteln
SET @streamid=(SELECT dbo.DATEISPEICHER.stream_id from dbo.DATEISPEICHER WHERE name=@Dateiname) ;