2012-03-29 9 views
3

Ich habe derzeit eine varchar (255) Spalte, die den Pfad zu einer kleinen Bilddatei speichert. Ich möchte versuchen, die Datei in eine neue Spalte des Typs varbinary (max) zu laden, weiß aber nicht, wie ich eine gespeicherte Prozedur dafür schreiben soll. So etwas wie eine solcheWie zu aktualisieren Varbinary (max) Spalte mit Pfad in Varchar Spalte gespeichert?

UPDATE MyTable 
SET image = "file located in field imagePath" 

Ich weiß, dass macht keinen Sinn, weil ich habe keine where-Klausel, aber was würde ich legte in seinen Platz ??

+0

So haben Sie den Weg in eine Tabelle und Ihre Frage ist man diesen Weg benutzen wollen und nimm die Datei und lade diese Datei in eine Spalte, die in einer anderen Tabelle vorhanden ist. Habe ich einen Sinn? – Teja

+0

Welche Version von SQL Server? –

+0

Ja Ich habe die Dateipfade in einem Feld und ich möchte die Datei in ein anderes Feld laden und dann das erste Feld löschen. Wechsel von im Dateisystem gespeicherten Bildern zu einem varbinären (max) Feld. Dies ist auf SQL Server 2008 R2 –

Antwort

1

SQL ist nicht gut geeignet für den Zugriff auf das Dateisystem, aber diese Aufgabe wäre nicht schwer in einem C#/VB.NET-Programm zu erreichen.

EDIT: Tim Lehner OPENROWSET Lösung ist ideal, wenn Sie auf SQL 2005 oder höher sind.

+0

SQLCLR könnte hier verwendet werden. Ich habe keine Zeit, alle Teile nachzuschlagen, damit es funktioniert. –

+0

@ Jeremy Pridemore, Sie könnten [hier] (http://www.mssqltips.com/sqlservertip/2349/read-and-write-binary-files-with-the-sql-server-clr/) suchen. –

+0

Danke! Am Ende habe ich nur eine kleine C# -Anwendung geschrieben, die die URLs aus der Datenbank liest und eine Auswahl in die Abfrage durchführt. 100.000+ Updates gegenüber 100.000 Einsätzen zu machen, war viel langsamer. –

3

Möglicherweise müssen Sie hierfür eine gespeicherte Prozedur erstellen.

Reading and Writing Files in SQL Server using T-SQL

Meine Zwecke nur Text enthalten, aber binär erwähnt wird: Ich habe die Procs hier um eine gute Wirkung skizziert verwendet.

Je nach Ihrer Version von SQL Server können Sie versuchen openrowset, oder als @ Jeremy Pridemore erwähnt, können Sie use the CLR.

UPDATE

Dieser Code kann Ihnen helfen, wenn Sie SQL2005 verwenden oder oben:

declare @MyFile varbinary(max) 
select @MyFile = bulkcolumn 
from openrowset (bulk 'C:\SomeFolder\SomeImage.jpg', single_blob) myfile 
select @MyFile 
Verwandte Themen