Jak wstawić obiekt blob do bazy danych za pomocą sql server management studio

Jak łatwo wstawić obiekt blob do pola varbinary (MAX)?

Dla argumentu:

Załóżmy, że chcę wstawić: c:\picture.png stół jest mytable kolumna to mypictureblob and the place is recid=1

Od jakiegoś czasu googluję i nie mogę znaleźć prostego rozwiązania

Dzięki!

Author: Toad, 2009-10-29

6 answers

Można wstawić do pola varbinary (max)za pomocą T-SQL w SQL Server Management Studio, a w szczególności za pomocą polecenia OPENROWSET.

Na przykład:

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
Zobacz poniższą dokumentację, aby zapoznać się z dobrym przykładem/przeglądem

Praca Z Typami Dużych Wartości

Zauważ, że w tym przypadku ścieżka do pliku jest względna do docelowego serwera SQL, a nie do klienta, który uruchamia to polecenie.

 60
Author: John Sansom,
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
2014-10-22 00:39:56

MSDN posiada Artykuł pracujący z dużymi typami wartości , który próbuje wyjaśnić, jak import części pracy, ale może się nieco mylące, ponieważ robi 2 rzeczy jednocześnie.

Oto wersja uproszczona, podzielona na 2 części. Przyjmij następującą prostą tabelę:

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

Jeśli uruchomisz (w SSMS):

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

Pokaże, że wynik wygląda jak Tabela z jedną kolumną o nazwie BulkColumn. Dlatego możesz go użyć w INSERT like:

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

Reszta jest po prostu dopasowanie go do wkładki z większą liczbą kolumn, które może mieć LUB NIE tabela. Jeśli podasz wynik select FOO, możesz użyć po nich stałych SELECT Foo.BulkColumn i as dla innych pól w tabeli.

Część, która może być bardziej skomplikowana, polega na tym, jak wyeksportować te dane z powrotem do pliku, aby sprawdzić, czy nadal są w porządku. Jeśli uruchomisz go na linii cmd:

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

Zacznie marudzić na 4 dodatkowe "params" i da mylące wartości domyślne(co spowoduje zmianę Pliku). Możesz zaakceptować pierwszy, ustawić 2nd na 0, a następnie assept 3rd i 4th, lub być jawnym:

Wpisz typ zapisu danych pola [varbinary (max)]:
Podaj przedrostek-długość danych pola [8]: 0
Podaj długość danych pola [0]:
Enter field terminator [brak]:

Wtedy zapyta:

Czy chcesz zapisać informacje o tym formacie w pliku? [Y / n] y
Nazwa pliku hosta [bcp.fmt]: C:\Test\bcp_2.fmt

Następnym razem, gdy będziesz musiał go uruchomić dodaj -f C:\Test\bcp_2.fmt i przestanie jęczeć :-) Oszczędza dużo czasu i smutku.

 14
Author: ZXX,
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
2018-09-26 03:07:43

Istnieją dwa sposoby, aby wybrać BLOB z TSQL:

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

Oraz:

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

Zwróć uwagę na nazwę korelacji po klauzuli FROM, która jest obowiązkowa.

Możesz wstawić, wykonując SELECT INSERT.

Możesz również użyć drugiej wersji, aby wykonać aktualizację, jak opisałem w Jak zaktualizować BLOB w SQL SERVER za pomocą TSQL .

 6
Author: yoel halb,
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
2017-05-23 11:33:24

Można jednak po prostu odczytać plik z dysku na maszynie SQL server:

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

Aby zobaczyć go w aplikacji zarządzania w formie hex (Management Studio).

Można więc np. utworzyć kopię zapasową bazy danych do pliku (lokalnie na serwerze), a następnie pobrać ją w inne miejsce za pomocą powyższej instrukcji.

 2
Author: pbies,
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
2012-11-13 22:10:29

Czy musisz to zrobić ze studia mgmt? Oto jak to zrobimy z linii cmd:

"C:\Program Files\Microsoft SQL Server\MSSQL \ Binn\TEXTCOPY.exe" /S /D /T mytable /C mypictureblob / F "C:\picture.png "/ w "where RecId=" / I

 1
Author: cagreen,
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
2009-10-29 13:36:18

Ok... to trwało zbyt długo. Narzędzie SQL-management studio nie jest po prostu do prostych rzeczy, takich jak to (co zauważyłem wcześniej, szukając, gdzie ustawić limit czasu na zapytania, a to było zrobione w 4 różnych lokalizacjach)

Ściągnąłem inny pakiet edytora sql (w moim przypadku SQL maestro). A oto zawiera edytor blob, w którym możesz przeglądać bloby i ładować nowe bloby do tych pól.

Dzięki za wkład!

 0
Author: Toad,
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
2009-10-29 14:49:21