2012-08-05 28 views

Respuesta

12

Hay dos formas de seleccionar un BLOB con TSQL:

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

, así como:

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

anote el nombre de correlación después de la cláusula FROM, que es obligatorio.

La segunda versión se puede utilizar para una actualización como en el siguiente ejemplo:

UPDATE MyTable 
SET blobField = 
    (SELECT BulkColumn FROM OPENROWSET (BULK 'C:\Test\Test1.pdf', SINGLE_BLOB) a) 
WHERE (CriteriaField = @criteria) 

Para actualizaciones parciales se puede utilizar el mutador SET .WRITE como se describe en this MSDN article, aquí se muestra la sintaxis:

UPDATE MyTable SET BlobField .WRITE (expression, @offset, @length) WHERE (CriteriaField = @criteria) 

Tenga en cuenta que el mutador WRITE solo se puede utilizar en campos NON-NULL.

De hecho, esto también se puede utilizar para realizar una actualización completa (si la columna no contiene NULL), estableciendo @offset en 0 y @length en NULL (o en la longitud real), como en el siguiente ejemplo :

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) 
+0

de hecho la primera versión de la instrucción SELECT es realmente nada más que el segundo SELECT simplemente utilizando en su lugar SELECT *, todavía lo incluí como una versión separada ya que esto es lo que el MSDN y otros recursos en línea utilizan en los ejemplos y parece que muchos desarrolladores piensan que es la única forma de hacerlo –

Cuestiones relacionadas