Frage

Wie kann ich einfach einen Klecks in einem varbinary(MAX) Feld einfügen?

Als Beispiel:

, was ich eingefügt werden soll: c: \ picture.png
der Tisch ist Mytable
die Spalte mypictureblob
der Ort ist recid = 1

War es hilfreich?

Lösung

können Sie fügen in eine varbinary (max) Feld T-SQL in SQL Server Management Studio und insbesondere mit der OPENROWSET commmand verwendet wird.

Zum Beispiel:

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

Werfen Sie einen Blick auf die folgende Dokumentation für ein gutes Beispiel / Komplettlösung

Arbeiten mit großen Werttypen

Beachten Sie, dass der Dateipfad in diesem Fall auf die gezielte SQL-Server ist relativ und nicht Ihre Client Sie diesen Befehl ausführen.

Andere Tipps

MSDN hat einen Artikel Arbeiten mit großen Werttypen ,  die versuchen, zu erklären, wie die Importteile arbeiten, aber es kann ein wenig bekommen verwirrend, da es gleichzeitig zwei Dinge tut.

Hier habe ich eine vereinfachte Version bin Bereitstellung, gebrochen in 2 Teile. Angenommen, die folgende einfache Tabelle:

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 laufen (in SSMS):

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

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

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

Der Rest ist passend einfach in einen Einsatz mit mehreren Spalten, die Ihre Tabelle haben können oder nicht. Wenn Sie das Ergebnis dieses select FOO nennen, dann können Sie verwenden SELECT Foo.BulkColumn und as danach für andere Felder in der Tabelle Konstanten.

Der Teil, der komplizierter bekommen kann, ist, wie man diese Daten wieder in eine Datei exportieren, so können Sie überprüfen, ob sie noch in Ordnung sind. Wenn Sie es auf cmd Zeile:

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

Es wird für 4 zusätzliche „params“ beginnen zu jammern und irreführend Standardwerte geben (die in einer geänderten Datei führen wird). Sie können die erste akzeptieren, stellen Sie die zweite auf 0 und dann assept 3. und 4. oder sein persönliches Vertrauen:

  

Geben Sie den Dateispeichertyp von Felddaten [varbinary (max)]:
     Geben Sie Präfix-Länge von Felddaten [8]: 0
     Geben Sie Länge des Feldes Daten [0]:
     Geben Sie Feldabschluss [none]:

Dann wird es fragen:

  

Wollen Sie dieses Format in einer Datei speichern? [Y / n] y
     Host Dateiname [bcp.fmt]: C: \ Test \ bcp_2.fmt

Das nächste Mal müssen Sie führen Sie es -f C:\Test\bcp_2.fmt hinzufügen und es wird aufhören :-) jammern Spart viel Zeit und Trauer.

Es gibt zwei Möglichkeiten, um ein BLOB mit TSQL SELECT:

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

Neben:

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

Beachten Sie die Korrelationsnamen nach dem FROM-Klausel, die zwingend vorgeschrieben ist.

Sie können diese dann INSERT durch ein INSERT-SELECT zu tun.

Sie können auch die zweite Version verwenden, ein Update zu tun, wie ich in Wie ein BLOB-Update in SQL Server TSQL verwenden.

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

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

zu sehen, es in Management-Anwendung in Hex-Form (Management Studio).

So können Sie zum Beispiel zu Backup-Datenbank (lokal auf dem Server-Datei) und dann durch die Erklärung oben zu anderer Stelle herunterladen.

Sie benötigen es von mgmt Studio zu tun? Hier ist, wie wir es von cmd Linie tun:

"C: \ Programme \ Microsoft SQL Server \ MSSQL \ Binn \ TEXTCOPY.exe" / S / D / T Mytable / C mypictureblob / F "C: \ picture.png" / W "wo RecId =" / I

Ok ... das hat mich viel zu lange. Die SQL-Management-Studio-Tool ist einfach nicht bis zu einfachen Dinge wie diese (die ich bemerkt habe, bevor bei der Suche nach dem das Timeout auf Abfragen setzen, und es wurde in 4 verschiedenen Orten durchgeführt)

ich heruntergeladen eine andere SQL-Editor-Paket (SQL Maestro in meinem Fall). Und siehe, es enthält einen BLOB-Editor, wo Sie an Blobs aussehen können, und laden Sie neue Blobs in diesen Bereich.

Dank für die Eingabe!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top