MS SQL-Server mit TSQL Bilddateien importieren
Ich habe eine Tabelle, in der in einem Feld ("Bildlink") ein Pfad zu einer Bild-JPG-Datei weggeschrieben ist.
Da die Tabelle mehrere 10.000 Datensätze enthält, benötige ich eine TSQL-Abfrage, mit der ich
die Bilder aus dem Pfad in ein Feld ("Bildimport") importieren kann.
So sieht die Tabelle aus:
CREATE TABLE [hsv].[dbo].[w_Bilddatei]
(Artikel_GUID uniqueidentifier null
,ArtikelNummer nvarchar(100) null
,Bildimport varbinary(max) null
,Bildlink nvarchar(100) null
) ON [PRIMARY];
GO
SELECT * FROM [hsv].[dbo].[w_Bilddatei]
Artikel_GUID ArtikelNummer Bildimport Bildlink
6EF40F0C-19B8-470D-AAB5-4B0C361B6F76 010379019 D:\Daten\Bilder\61313.jpg
5F4884D9-E0CA-4117-8C4F-F733C703DEA4 010379030 D:\Daten\Bilder\61329.jpg
FF1E3C05-72F8-4F91-BC5F-C87EA05BBB31 010379040 D:\Daten\Bilder\61478.jpg
752C4620-4FCB-4D66-8C99-9F1ED0E476BA 010379075 D:\Daten\Bilder\61617.jpg
A60786F9-6D5A-4630-B9C1-03AEECCEB31B 010825582 D:\Daten\Bilder\61101.jpg
E4D31FAE-FB9E-4767-8671-7CD16FA9506F 010825589 D:\Daten\Bilder\61009.jpg
Könnt Ihr mir mit einem Script helfen, wie ich die Bilddateien aus dem Pfad ("Bildlink") in das Feld "Bildimport" importieren kann.
Vielen für Eure Hilfe.
Da die Tabelle mehrere 10.000 Datensätze enthält, benötige ich eine TSQL-Abfrage, mit der ich
die Bilder aus dem Pfad in ein Feld ("Bildimport") importieren kann.
So sieht die Tabelle aus:
CREATE TABLE [hsv].[dbo].[w_Bilddatei]
(Artikel_GUID uniqueidentifier null
,ArtikelNummer nvarchar(100) null
,Bildimport varbinary(max) null
,Bildlink nvarchar(100) null
) ON [PRIMARY];
GO
SELECT * FROM [hsv].[dbo].[w_Bilddatei]
Artikel_GUID ArtikelNummer Bildimport Bildlink
6EF40F0C-19B8-470D-AAB5-4B0C361B6F76 010379019 D:\Daten\Bilder\61313.jpg
5F4884D9-E0CA-4117-8C4F-F733C703DEA4 010379030 D:\Daten\Bilder\61329.jpg
FF1E3C05-72F8-4F91-BC5F-C87EA05BBB31 010379040 D:\Daten\Bilder\61478.jpg
752C4620-4FCB-4D66-8C99-9F1ED0E476BA 010379075 D:\Daten\Bilder\61617.jpg
A60786F9-6D5A-4630-B9C1-03AEECCEB31B 010825582 D:\Daten\Bilder\61101.jpg
E4D31FAE-FB9E-4767-8671-7CD16FA9506F 010825589 D:\Daten\Bilder\61009.jpg
Könnt Ihr mir mit einem Script helfen, wie ich die Bilddateien aus dem Pfad ("Bildlink") in das Feld "Bildimport" importieren kann.
Vielen für Eure Hilfe.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 42730335576
Url: https://administrator.de/contentid/42730335576
Ausgedruckt am: 21.11.2024 um 20:11 Uhr
13 Kommentare
Neuester Kommentar
Also, der SQL Server Dienst soll die Datei vom Dateisystem lesen und in der Tabelle als VARBINARY speichern? Ich würde sagen das geht in diese Richtung:
https://stackoverflow.com/questions/1643627/how-to-insert-a-blob-into-a- ...
Du wirst vermutlich einen Cursor bauen müssen, ich glaube nicht, das es anders mit mehreren Dateien auf einmal geht. Bei der Menge würde man das auch nicht wollen.
https://stackoverflow.com/questions/1643627/how-to-insert-a-blob-into-a- ...
Du wirst vermutlich einen Cursor bauen müssen, ich glaube nicht, das es anders mit mehreren Dateien auf einmal geht. Bei der Menge würde man das auch nicht wollen.
Sry ich kann dir aus Zeitgründen nur einen guten Link geben:
https://www.mssqltips.com/sqlservertip/1599/cursor-in-sql-server/
Cursor ist aber eigentlich nicht sonderlich schwer. Im Select lädst du alle gewünschten Daten und schreibst aus dem Ergebnis immer die Daten einer Zeile in Variablen. Dann führst du deinen Befehl aus und lädst die nächste Zeile.
https://www.mssqltips.com/sqlservertip/1599/cursor-in-sql-server/
Cursor ist aber eigentlich nicht sonderlich schwer. Im Select lädst du alle gewünschten Daten und schreibst aus dem Ergebnis immer die Daten einer Zeile in Variablen. Dann führst du deinen Befehl aus und lädst die nächste Zeile.
Moin,
Vorab: nutze bitte einmal die Code-Tags hier
Zu deinem Problem:
Du hast die nachfolgende Struktur, richtig?
Lösungsansatz (ungetestet):
Deine Spalte "BildLink" muss nur einen anderen Datentypen haben:
Ansonsten probiere es mal per STORED PROCEDURE:
Vorab: nutze bitte einmal die Code-Tags hier
Zu deinem Problem:
Du hast die nachfolgende Struktur, richtig?
Artikel_GUID ArtikelNummer Bildimport Bildlink
------------------------------------------------------------------------------------------------
6EF40F0C-19B8-470D-AAB5-4B0C361B6F76 010379019 D:\Daten\Bilder\61313.jpg NULL
5F4884D9-E0CA-4117-8C4F-F733C703DEA4 010379030 D:\Daten\Bilder\61329.jpg NULL
FF1E3C05-72F8-4F91-BC5F-C87EA05BBB31 010379040 D:\Daten\Bilder\61478.jpg NULL
752C4620-4FCB-4D66-8C99-9F1ED0E476BA 010379075 D:\Daten\Bilder\61617.jpg NULL
A60786F9-6D5A-4630-B9C1-03AEECCEB31B 010825582 D:\Daten\Bilder\61101.jpg NULL
E4D31FAE-FB9E-4767-8671-7CD16FA9506F 010825589 D:\Daten\Bilder\61009.jpg NULL
Lösungsansatz (ungetestet):
UPDATE [hsv].[dbo].[w_Bilddatei]
SET Bildlink = (SELECT BulkColumn FROM OPENROWSET (BULK [BildImport], SINGLE_BLOB)
Deine Spalte "BildLink" muss nur einen anderen Datentypen haben:
VARBINARY (max)
Ansonsten probiere es mal per STORED PROCEDURE:
Leider wünscht man sich hier die Übernahme der Bilder in die Datenbank.
Daher benötige ich die Hilfe für die Aktion.
Daher benötige ich die Hilfe für die Aktion.
Bleibt die Frage, warum?
Um das Bild gegen Fremdladen abzusichern?
Das wird nicht funktionieren, da letztlich das Bild als selbiges beim Client landet und als selbiges abgespeichert werden kann.
Wäre also nur der Weg sinnvoll, das nur angemeldete Benutzer die Bilder aus dem DB-Link abrufen können ...
das entweder direkt, oder via Temp-Kopie ...
... die Steuerung erfolgt dabei aber nicht vom DB- sondern vom Webserver ...
Hallo,
Du darfst keine Varaiblen oder Spalten als Pfad angeben, das muß schon ein String sein. Da kommst Du um dynamisches SQL nicht herum. Probier mal:
Gruß, Mad Max
Du darfst keine Varaiblen oder Spalten als Pfad angeben, das muß schon ein String sein. Da kommst Du um dynamisches SQL nicht herum. Probier mal:
BEGIN
declare @guid uniqueidentifier;
declare @pfad nvarchar(200);
declare @bild varbinary(max);
declare @nsql nvarchar (1000)
declare MeinZeiger cursor for
SELECT Artikel_GUID, Bildlink FROM [w_Bilddatei];
OPEN MeinZeiger;
FETCH NEXT FROM MeinZeiger INTO @guid, @pfad;
WHILE @@FETCH_STATUS = 0
BEGIN
select @nsql = 'update [hsv].[dbo].[w_Bilddatei] set Bildimport = (select BulkColumn from OPENROWSET (BULK ''' + @pfad + ''', SINGLE_BLOB) r) where Artikel_GUID = ''' + convert (varchar (100), @guid) + ''';'
exec sp_executesql @nsql
FETCH NEXT FROM MeinZeiger INTO @guid, @pfad;
END
CLOSE MeinZeiger;
DEALLOCATE MeinZeiger;
END;