webentwicklung-frage-antwort-db.com.de

Einfügen eines Blobs in eine Datenbank mit SQL Server Management Studio

Wie kann ich einfach einen Blob in ein varbinary(MAX) Feld einfügen?

Als Beispiel:

ich möchte Folgendes einfügen: c:\picture.png
Der Tisch ist mytable
die spalte ist mypictureblob
der Ort ist recid = 1

48
Toad

Sie können mit T-SQL in SQL Server Management Studio und insbesondere mit dem Befehl OPENROWSET in ein varbinary (max) -Feld einfügen.

Beispielsweise:

INSERT Production.ProductPhoto 
(
    ThumbnailPhoto, 
    ThumbnailPhotoFilePath, 
    LargePhoto, 
    LargePhotoFilePath
)
SELECT ThumbnailPhoto.*, null, null, N'tricycle_pink.gif'
FROM OPENROWSET 
    (BULK 'c:\images\tricycle.jpg', SINGLE_BLOB) ThumbnailPhoto

In der folgenden Dokumentation finden Sie ein gutes Beispiel/eine exemplarische Vorgehensweise

Arbeiten mit großen Werttypen

Beachten Sie, dass sich der Dateipfad in diesem Fall auf den Ziel-SQL-Server und nicht auf Ihren Client bezieht, auf dem dieser Befehl ausgeführt wird.

64
John Sansom

MSDN hat einen Artikel Arbeiten mit großen Werttypen , der versucht zu erklären, wie die Importteile funktionieren, der jedoch etwas verwirrend sein kann, da er zwei Dinge gleichzeitig ausführt.

Hier stelle ich eine vereinfachte Version zur Verfügung, die in zwei Teile aufgeteilt ist. Nehmen wir die folgende einfache Tabelle an:

CREATE TABLE [Thumbnail](
   [Id]        [int] IDENTITY(1,1) NOT NULL,
   [Data]      [varbinary](max) NULL
CONSTRAINT [PK_Thumbnail] PRIMARY KEY CLUSTERED 
(
[Id] ASC
) ) ON [PRIMARY]

Wenn Sie (in SSMS) ausführen:

SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

es wird angezeigt, dass das Ergebnis wie eine Tabelle mit einer Spalte namens BulkColumn aussieht. Deshalb können Sie es in INSERT wie folgt verwenden:

INSERT [Thumbnail] ( Data )
SELECT * FROM OPENROWSET (BULK 'C:\Test\TestPic1.jpg', SINGLE_BLOB) AS X

Der Rest passt einfach in eine Einfügung mit mehr Spalten, die Ihre Tabelle haben kann oder nicht. Wenn Sie das Ergebnis dieses select FOO Nennen, können Sie danach SELECT Foo.BulkColumn Und as Konstanten für andere Felder in Ihrer Tabelle verwenden.

Der Teil, der kniffliger werden kann, ist das Exportieren dieser Daten in eine Datei, damit Sie überprüfen können, ob sie noch in Ordnung sind. Wenn Sie es in der Befehlszeile ausführen:

bcp "select Data from B2B.dbo.Thumbnail where Id=1" 
queryout D:\T\TestImage1_out2.dds -T -L 1 

Es wird anfangen, nach 4 zusätzlichen "Parametern" zu jammern, und es wird irreführende Standardeinstellungen geben (die zu einer geänderten Datei führen werden). Sie können den ersten akzeptieren, den zweiten auf 0 setzen und dann den dritten und vierten beginnen oder explizit sein:

Geben Sie den Dateityp des Feldes ein. Daten [varbinary (max)]:
Geben Sie die Präfixlänge des Feldes Daten [8] ein: 0
Länge des Feldes eingeben Daten [0]:
Feldabschluss eingeben [keine]:

Dann wird es fragen:

Möchten Sie diese Formatinformationen in einer Datei speichern? [J/n] j
Host-Dateiname [bcp.fmt]: C:\Test\bcp_2.fmt

Wenn Sie es das nächste Mal ausführen müssen, fügen Sie -f C:\Test\bcp_2.fmt Hinzu und es hört auf zu jammern :-) Spart viel Zeit und Kummer.

15
ZXX

Es gibt zwei Möglichkeiten, ein BLOB mit TSQL auszuwählen:

SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

Ebenso gut wie:

SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a

Beachten Sie den Korrelationsnamen nach der FROM-Klausel, die obligatorisch ist.

Sie können dies dann zu INSERT machen, indem Sie INSERT SELECT ausführen.

Sie können auch die zweite Version verwenden, um ein UPDATE durchzuführen, wie in So aktualisieren Sie ein BLOB in SQL-SERVER mit TSQL beschrieben.

8
yoel halb

Sie können jedoch einfach eine Datei von der Festplatte auf dem SQL Server-Computer lesen:

select * from openrowset (bulk 'c:\path\filename.ext',single_blob) a

um es in der Verwaltungsanwendung in hexadezimaler Form zu sehen (Management Studio).

So können Sie beispielsweise die Datenbank in eine Datei sichern (lokal auf dem Server) und sie dann mithilfe der obigen Anweisung an einen anderen Ort herunterladen.

2
pbies

Müssen Sie es von mgmt Studio tun? So machen wir es aus der cmd-Zeile:

"C:\Programme\Microsoft SQL Server\MSSQL\Binn\TEXTCOPY.exe"/S <Server>/D <Datenbank>/T mytable/C mypictureblob/F "C:\picture.png"/W "where RecId = "/ I

1
cagreen

Ok ... das hat viel zu lange gedauert. Das SQL-Management Studio-Tool ist einfach nicht ganz so einfach (was mir schon früher aufgefallen ist, als ich nach einem Ort gesucht habe, an dem das Zeitlimit für Abfragen festgelegt werden soll. Es wurde an vier verschiedenen Orten durchgeführt.)

Ich habe ein anderes SQL Editor-Paket heruntergeladen (in meinem Fall SQL Maestro). Und siehe da, es enthält einen Blob-Editor, in dem Sie sich Blobs ansehen und neue Blobs in dieses Feld laden können.

danke für die eingabe!

0
Toad