Jak wyeksportować kolumnę obrazu do plików w SQL Server?
14
Przeprowadzę migrację z bazy danych. Jest jedna kolumna typu image, którą chciałbym wyeksportować do plików binarnych w systemie plików. Jeden plik dla każdego rekordu. Jak mogę to zrobić za pomocą programu SQL Server?
Wypróbowałem powyższy kod i rzeczywiście zadziałało ... do pewnego stopnia. Z jakiegoś powodu obraz JPG zawiera 4 poprzedzające znaki, które powodują, że staje się on nieprawidłowy. Usunąłem je za pomocą edytora tekstu i voila ... JPG działało. Masz pojęcie, czym mogą być te 4 postacie i jak się ich pozbyć w eksporcie? Są to:2B 90 01 00
Jaki typ kolumny wyeksportowałeś?
Max Vernon
10
Miałem ten sam problem z dodawaniem dodatkowych 4 bajtów na początku wszystkich moich plików. Zamiast używać opcji -N w mojej komendzie bcp, zmieniłem ją na -C RAW. Po wykonaniu tej czynności program bcp zostanie poproszony o następujące pytania:
Wpisz typ przechowywania plików w polu FileData [image]:
Podaj długość prefiksu pola FileData [4]:
Wpisz długość pola FileData [0]:
Wpisz terminator pola [brak]:
Czy chcesz zapisać informacje o tym formacie w pliku? [T / n]
Aby to naprawić, utworzyłem plik tekstowy (i.txt) w katalogu głównym mojego serwera SQL, który zawierał następujące wiersze odpowiadające na każdy z nich:
ja
0
0
n
Następnie moja linia EXEC bcp stała się:
EXEC master..xp_cmdshell 'BCP' WYBIERZ kolumna_typu_obrazu OD ** twój_db GDZIE id = 1 „zapytanie” C: \ exportdir \ twój_plik.pdf "-T -C RAW <C: \ i.txt '
To wyeksportowało mój plik bez żadnych dodatkowych znaków.
Przyszedłem dookoła szukając rozwiązania do eksportu kolumny IMAGE, przechowującej różnego rodzaju pliki (pdf, xls, doc, xml ...), które chcę wyeksportować.
Podejście w odpowiedzi działało tylko w przypadku plików pdf. Aby wyeksportować wszystkie rodzaje plików musiałem dostosować rozwiązanie w następujący sposób:
Jeśli nie masz żadnego problemu z rozwiązaniem GUI, istnieje naprawdę świetny dodatek do SSMS SSMSBoost, który zapewnia wiele przydatnych funkcji i oczywiście najprostszy sposób podglądu obrazów przechowywanych w SQL (przynajmniej moim zdaniem)
UWAGA : Musisz ponownie uruchomić SSMS po zainstalowaniu tego dodatku.
Zainstaluj go i ciesz się podglądem obrazów za pomocą: RightClick> Visualize As> Picture
Na niektórych serwerach xp_cmdshell jest wyłączony i dostajeszSQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
JustAMartin
-2
USE[POC]DECLARE@outPutPath varchar(50)='C:\Extract_Photos',@i bigint
,@init int
,@data varbinary(max),@fPath varchar(max),@folderPath varchar(max)--Get Data into temp Table variable so that we can iterate over itDECLARE@Doctable TABLE(id int identity(1,1),[Doc_Num] varchar(100),[FileName] varchar(100),[Doc_Content] varBinary(max))INSERTINTO@Doctable([Doc_Num],[FileName],[Doc_Content])Select[STUDENTNO],[STUDENTNAME],[STUDENTPHOTO]FROM[dbo].[STUDENTPHOTOS]--SELECT * FROM @tableSELECT@i = COUNT(1)FROM@Doctable
WHILE@i >=1BEGINSELECT@data =[Doc_Content],@fPath =@outPutPath +'\'+ [Doc_Num] + '\' +[FileName],
@folderPath = @outPutPath + '\'+ [Doc_Num]
FROM @Doctable WHERE id = @i
--Create folder first
EXEC [dbo].[CreateFolder] @folderPath
EXEC sp_OACreate 'ADODB.Stream', @init OUTPUT; -- An instace created
EXEC sp_OASetProperty @init, 'Type', 1;
EXEC sp_OAMethod @init, 'Open'; -- Calling a method
EXEC sp_OAMethod @init, 'Write', NULL, @data; -- Calling a method
EXEC sp_OAMethod @init, 'SaveToFile', NULL, @fPath, 2; -- Calling a method
EXEC sp_OAMethod @init, 'Close'; -- Calling a method
EXEC sp_OADestroy @init; -- Closed the resources
print 'Document Generated at -'+@fPath
--Reset the variables for next useSELECT@data =NULL,@init =NULL,@fPath =NULL,@folderPath =NULLSET@i -=1END
Popraw swój post, wyjaśniając, co ten kod ma zrobić.
dezso
Dzięki Erax za skrypt zadziałał cudownie. PS: Skrypt nie może wyodrębnić pliku, jeśli został uruchomiony zdalnie przy użyciu SSMS. Musiał zostać uruchomiony bezpośrednio na SQLServer, aby mógł pobrać załącznik.
Odpowiedzi:
Oto rozwiązanie, które wymyśliłem:
Włącz za
xp_cmdshell
pomocąW razie potrzeby utwórz katalog z,
xp_cmdshell
aby uzyskać potrzebne uprawnienia.Użyj BCP z zapytaniem
** twoja_db musi być w pełni kwalifikowaną nazwą tabeli, tj. [Yourdb]. [YourSchema]. [YourTable]
źródło
2B 90 01 00
Miałem ten sam problem z dodawaniem dodatkowych 4 bajtów na początku wszystkich moich plików. Zamiast używać opcji -N w mojej komendzie bcp, zmieniłem ją na -C RAW. Po wykonaniu tej czynności program bcp zostanie poproszony o następujące pytania:
Aby to naprawić, utworzyłem plik tekstowy (i.txt) w katalogu głównym mojego serwera SQL, który zawierał następujące wiersze odpowiadające na każdy z nich:
Następnie moja linia EXEC bcp stała się:
To wyeksportowało mój plik bez żadnych dodatkowych znaków.
źródło
Przyszedłem dookoła szukając rozwiązania do eksportu kolumny IMAGE, przechowującej różnego rodzaju pliki (pdf, xls, doc, xml ...), które chcę wyeksportować.
Podejście w odpowiedzi działało tylko w przypadku plików pdf. Aby wyeksportować wszystkie rodzaje plików musiałem dostosować rozwiązanie w następujący sposób:
(1.) Utwórz plik szablonu formatu:
(2.) Otwórz utworzony plik formatu eksportu i edytuj go w ten sposób:
Następnie wykonaj polecenie eksportu:
(3.) W przypadku napotkania tego błędu (tak jak ja):
upewnij się, że:
Następnie eksport dowolnego słowa pliku kolumny IMAGE bez błędu.
Hołdy dla 1. i 2. przechodzą do odpowiedzi na następujące pytanie: /programming/1366544/how-to-export-image-field-to-file/24006947#24006947
źródło
Jeśli nie masz żadnego problemu z rozwiązaniem GUI, istnieje naprawdę świetny dodatek do SSMS SSMSBoost, który zapewnia wiele przydatnych funkcji i oczywiście najprostszy sposób podglądu obrazów przechowywanych w SQL (przynajmniej moim zdaniem)
UWAGA : Musisz ponownie uruchomić SSMS po zainstalowaniu tego dodatku.
Zainstaluj go i ciesz się podglądem obrazów za pomocą: RightClick> Visualize As> Picture
źródło
Trzymaj polecenie na JEDNEJ LINII - POJEDYNCZEJ LINII !!!
źródło
SQL Server blocked access to procedure 'sys.xp_cmdshell' of component 'xp_cmdshell' because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of 'xp_cmdshell' by using sp_configure. For more information about enabling 'xp_cmdshell', search for 'xp_cmdshell' in SQL Server Books Online.
źródło