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!
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.
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.
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 .
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.
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
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!
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