it-swarm.com.de

Wie kann ich binäre Dateidaten mit einer einfachen insert-Anweisung in ein binäres SQL-Feld einfügen?

Ich besitze einen SQL Server 2000 mit einer Tabelle, die eine image -Spalte enthält.

Wie füge ich die Binärdaten einer Datei in diese Spalte ein, indem ich den Pfad der Datei spezifiziere?

CREATE TABLE Files
(
  FileId int,
  FileData image
)
58
scottm

Wenn Sie ein Literal verwenden möchten, müssen Sie lediglich eine Binärzeichenfolge erstellen:

insert into Files (FileId, FileData) values (1, 0x010203040506)

Und Sie haben einen Datensatz mit einem 6-Byte-Wert für das FileData-Feld.


In den Kommentaren geben Sie an, dass Sie nur den Dateinamen angeben möchten, was mit SQL Server 2000 (oder einer anderen mir bekannten Version) nicht möglich ist.

Sie benötigen dazu eine gespeicherte CLR-Prozedur in SQL Server 2005/2008 oder eine erweiterte gespeicherte Prozedur (dies würde ich jedoch um jeden Preis vermeiden, es sei denn, Sie müssen dies tun), die den Dateinamen übernimmt und dann die Daten einfügt (oder das Byte zurückgibt Zeichenfolge, aber das kann möglicherweise recht lang sein).


In Bezug auf die Frage, ob nur Daten von einem SP/einer Abfrage abgerufen werden können, würde ich sagen, dass die Antwort "Ja" lautet, denn wenn Sie SQL Server die Möglichkeit geben, Dateien aus dem Dateisystem zu lesen, was tun Sie, wenn Sie nicht in der Lage sind? Welcher Benutzer wird verwendet, um die Rechte zu bestimmen, wenn er über die Windows-Authentifizierung verbunden ist? Wenn Sie den Dienst als Administrator ausführen (Gott bewahre), können Sie eine Erhöhung von Rechten haben, die nicht zulässig sein sollte.

51
casperOne

Ich glaube, das wäre irgendwo in der Nähe.

INSERT INTO Files
(FileId, FileData)
SELECT 1, * FROM OPENROWSET(BULK N'C:\Image.jpg', SINGLE_BLOB) rs

Zu beachten ist, dass das oben genannte in SQL Server 2005 und SQL Server 2008 mit dem Datentyp varbinary(max) ausgeführt wird. Es wurde nicht mit Bild als Datentyp getestet.

95
Blithe