Jak mogę wstawić dane binarne do binarnego pola SQL za pomocą prostej instrukcji insert?

Mam SQL Server 2000 z tabelą zawierającą kolumnę image.

Jak wstawić dane binarne pliku do tej kolumny, określając ścieżkę pliku?

CREATE TABLE Files
(
  FileId int,
  FileData image
)
Author: marc_s, 2009-07-13

2 answers

Jeśli masz na myśli użycie literału, musisz po prostu utworzyć ciąg binarny:

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

I będziesz miał rekord z sześciobajtową wartością dla pola FileData.


W komentarzach zaznaczasz, że chcesz po prostu podać nazwę pliku, czego nie możesz zrobić z SQL Server 2000(lub inną wersją, którą znam).

Potrzebujesz procedury składowanej CLR, aby to zrobić w SQL Server 2005/2008 lub rozszerzonej procedury składowanej (ale unikałbym tego za wszelką cenę chyba, że trzeba), który pobiera nazwę pliku, a następnie wstawia dane(lub zwraca łańcuch bajtów, ale może to być dość długie).


W odniesieniu do kwestii możliwości pobierania danych tylko z SP / query, powiedziałbym, że odpowiedź brzmi tak, ponieważ jeśli dajesz SQL Server możliwość odczytu plików z systemu plików, co robisz, gdy nie jesteś połączony przez uwierzytelnianie Windows, jaki użytkownik jest używany do określania praw? Jeśli prowadzisz serwis jako admin (broń Boże) wtedy możesz mieć podwyższenie uprawnień, które nie powinny być dozwolone.

 48
Author: casperOne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-12-05 13:50:09

Myślę, że to byłoby gdzieś blisko.

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

Warto zauważyć, że powyższe działa w SQL Server 2005 i SQL Server 2008 z typem danych jako varbinary(max). Nie był testowany z obrazem jako typem danych.

 86
Author: Blithe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-06 09:36:33