Sto tentando di esportare un numero piuttosto elevato di file di immagine, memorizzati internamente in un database SQL come dati binari.Esportazione di dati di file binari (immagini) da SQL tramite una stored procedure
Essendo abbastanza nuovo per scrivere stored procedure in SQL, mi sono imbattuto in un paio di guide molto utili su come questo può essere archiviato, ma mi sembra che manchi qualcosa.
Sto eseguendo SQL Server 2008 R2 localmente e sto provando a scrivere i file in una cartella sul mio C: \ drive.
qui è la parte buisness di ciò che ho finora:
BEGIN
DECLARE @cmd VARCHAR(8000)
DECLARE @result int
DECLARE curExportBinaryDocs CURSOR FAST_FORWARD FOR
SELECT 'BCP "SELECT Photograph_Data FROM [ALBSCH Trial].[dbo].[Photograph] WHERE Photograph_ID = '
+ CAST(Photograph_ID AS VARCHAR(500)) + '" queryout "' + @OutputFilePath
+ CAST(Photograph_ID AS VARCHAR(500)) + '.jpg"' + ' -n -T'
FROM dbo.Photograph
OPEN curExportBinaryDocs
FETCH NEXT FROM curExportBinaryDocs INTO @cmd
WHILE @@FETCH_STATUS = 0
BEGIN
--PRINT @cmd
EXEC @result = xp_cmdshell @cmd
FETCH NEXT FROM curExportBinaryDocs INTO @cmd
END
CLOSE curExportBinaryDocs
DEALLOCATE curExportBinaryDocs
END
'@result' viene sempre impostato a '1' (fallito) dopo la chiamata xp_cmdshell. Tutti i nomi/campi della tabella sono corretti, quindi sospetto che ci sia qualcosa di sbagliato nella mia chiamata BCP, ma non sono sicuro di cosa provare dopo.
Qualsiasi aiuto o consiglio sarebbe molto gradito.
Come si esegue SQL? L'SQL viene eseguito con le credenziali dell'utente ... Quell'utente ha i diritti per creare file nella cartella di output? –
Accedo al server SQL utilizzando il mio solito nome utente Windows e l'autenticazione di Windows. Sono riuscito a far funzionare una soluzione utilizzando il metodo descritto qui: http://stackoverflow.com/questions/1366544/how-to-export-image-field-to-file ma se possibile mi piacerebbe arrivare a la parte inferiore del problema che sto avendo con il mio metodo originale, solo per la pace della mente! – ChrisMurray
Credo che quello che stai facendo sia un po 'sbagliato. Conosci il "Database di abilitazione del flusso di file" di SQL Server. Consente di archiviare BLOB sul disco rigido mentre i BLOB sono ancora gestiti dal server SQL. Dopo aver selezionato questo BLOB sull'unità, l'applicazione deve solo eseguire una query sul database e ottenere l'oggetto. Inoltre, usare il cursore non è una buona cosa (è lento). – gotqn