Bezpośredni insert bloba ze skryptu SQL

0

Witam
Czy da się w mssql zrobić skrypt z insertami, który dla kolumny typu [varbinary] będzie miał w skrypcie wpisaną wartość ?

Przygotowując wersję na środowisku testowym wgrywam sobie bloba za pomocą 'Bulka':

insert into tabela 
SELECT BulkColumn 
FROM Openrowset( Bulk 'C:\path\file', Single_Blob) as img

Chciałbym, aby produkcyjnie wgrywanie wersji było o jedną czynność mniej: nie wgrywać pliku na serwer mssql, a dać administratorowi tylko skrypt do wgrania.

Wprawdzie generowanie skryptu (Tasks>Generate Scripts z opcją Types od data to script = Data only generuje mi inserta, ale jest on 'raczej' niepoprawny.

pzdr
Bogdan

1

W jakim sensie niepoprawny? Albo jest ok albo nie jest. Baza lyknie bloba zawsze tylko trzeba odpowiednio zdefiniowac insert. Jesli chodzi o danie jakichkolwiek uprawnień dla administratora typu niech sobie sam zrobi to raczej wyeliminowalbym taka możliwość. Z prostego powodu, administrator niespelniony informatyk potrafi otwierać dane i kombinować jak je edytować. Przejdź się do serwisu w swojej firmie i pogadaj jakie przypadki mieli to zobaczysz ze użytkownikowi nie można dawać zbyt wiele do roboty.

0

Podsumowując:
a) ŹLE: Generowanie skryptu za pomocą wizarda w Sql Server Studio (Tasks>Generate Scripts z opcją Types od data to script = Data only) generuje polecenie insert, ale obcina bloba, bo insert się generuje jednoliniowy.
,czyli:

insert into Tabela (...., blob_file) select ...., 0x4D5A9000045340503450405400300000004000000F //blob o długości maksymalnej długości linii, reszta obcieta

b) ŹLE: Napisanie ręcznie polecenia insert z dużym blobem i wykonanie go powoduje zainsertowanie do bazy bloba obciętego do 8kb
,czyli:

insert into Tabela (...., blob_file) 
select ...., 0x4D5A9000045340503450408
+0x17FE01130511053AFF0000000073420
+0x8C08110000006208110C0A7E2F0000
...
+011305110514FE01130411042D0811056
//zainsertuje obcinając blob do 8kb

c) DOBRZE: zadeklarowanie zmiennej typu [varbinary(max)] i dodawanie do tej zmiennej, np.:

declare
@big_insert varbinary(max)

set @big_insert = 0x4D5A9000045340503450405400300000004000000F
set @big_insert = @big_insert+0x17FE01130511053AFF0000000073420
set @big_insert = @big_insert+0x8C08110000006208110C0A7E2F0000
...
set @big_insert = @big_insert+011305110514FE01130411042D0811056

insert into Tabela (...., blob_file) select ...., @big_insert

1 użytkowników online, w tym zalogowanych: 0, gości: 1