Jak zaktualizować pole BLOB tylko za pomocą TSQL (na przykład z SSMS i nie używając żadnego kodu, takiego jak ADO.Net lub Linq)?Jak zaktualizować obiekt BLOB w SQL SERVER Za pomocą TSQL
8
A
Odpowiedz
12
Istnieją dwa sposoby, aby wybrać BLOB z TSQL:
SELECT * FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a
jak również:
SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a
Uwaga Nazwa korelacja po klauzuli FROM, który jest obowiązkowy.
Druga wersja może być wykorzystane do aktualizacji, jak w poniższym przykładzie:
UPDATE MyTable
SET blobField =
(SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a)
WHERE (CriteriaField = @criteria)
Dla częściowych aktualizacji można wykorzystać modyfikujące SET .write jak opisano w this MSDN article tu przedstawiono składnię:
UPDATE MyTable SET BlobField .WRITE (expression, @offset, @length) WHERE (CriteriaField = @criteria)
Należy pamiętać, że mutator WRITE może być używany tylko w polach NIEPEŁNOSPRAWNYCH.
W rzeczywistości może to również służyć do wykonania pełnej aktualizacji (jeśli kolumna nie zawiera wartości NULL), ustawiając @offset na 0 i @ length na NULL (lub na rzeczywistą długość), jak w poniższym przykładzie :
DECLARE @tmp VARBINARY(MAX) --Change to the correct datatype here
SELECT @tmp = BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a
UPDATE MyTable SET BlobField .WRITE (@tmp, 0, NULL) WHERE (CriteriaField = @criteria)
w rzeczywistości pierwsza wersja SELECT jest niczym więcej niż drugi SELECT tylko używając zamiast SELECT *, Still i włączyła ją jako oddzielną wersję, ponieważ to, co MSDN i innych zasobów internetowych użyć w przykładach wydaje się, że wielu programistów uważa to za jedyny sposób na zrobienie tego –