Pergunta

Como posso inserir facilmente um bolhas em um varbinary(MAX) campo?

Como um exemplo:

A coisa que quero inserir é: C: Picture.png
A mesa é mytable
A coluna é MyPictureBlob
O local está recid = 1

Foi útil?

Solução

Você pode inserir um campo Varbinary (MAX) usando o T-SQL no SQL Server Management Studio e, em particular, usando o OpenRowset Commmand.

Por exemplo:

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

Dê uma olhada na seguinte documentação para um bom exemplo/passo a passo

Trabalhando com grandes tipos de valor

Observe que o caminho do arquivo neste caso é relativo ao servidor SQL direcionado e não ao seu cliente executando este comando.

Outras dicas

MSDN tem um artigo Trabalhando com grandes tipos de valor, que tenta explicar como as peças de importação funcionam, mas pode ficar um pouco confuso, pois faz duas coisas simultaneamente.

Aqui estou fornecendo uma versão simplificada, quebrada em 2 partes. Suponha a seguinte tabela simples:

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

Se você corre (no SSMS):

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

Isso mostrará que o resultado parece uma tabela com uma coluna chamada BulkColumn. É por isso que você pode usá -lo em inserção como:

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

O resto está apenas encaixando -o em uma inserção com mais colunas, que sua tabela pode ou não ter. Se você nomear o resultado disso select FOO Então você pode usar SELECT Foo.BulkColumn e as Depois disso, as constantes para outros campos em sua mesa.

A parte que pode ficar mais complicada é como exportar esses dados para um arquivo para que você possa verificar se ainda está bem. Se você o executar na linha CMD:

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

Ele começará a reclamar de 4 "parâmetros" adicionais e fornecerá padrões enganosos (o que resultará em um arquivo alterado). Você pode aceitar o primeiro, definir o 2 a 0 e depois assept 3º e 4º, ou para ser explícito:

Digite o tipo de armazenamento de arquivos dados de campo [varbinária (max)]:
Digite o comprimento do prefixo dos dados de campo [8]: 0
Digite dados de dados de campo [0]:
Digite o Terminator de Campo [nenhum]:

Então ele perguntará:

Deseja salvar essas informações de formato em um arquivo? [Y/n] y
Nome do arquivo host [bcp.fmt]: C: test bcp_2.fmt

Da próxima vez que você tiver que executá -lo adicionar -f C:\Test\bcp_2.fmt E isso vai parar de reclamar :-) economiza muito tempo e tristeza.

Existem duas maneiras de selecionar um blob com TSQL:

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

Assim como:

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

Observe o nome de correlação após a cláusula de From, que é obrigatório.

Você pode então ser inserido fazendo uma seleção de inserção.

Você também pode usar a segunda versão para fazer uma atualização como descrevi em Como atualizar um BLOB no SQL Server usando TSQL .

No entanto, você pode simplesmente ler um arquivo do disco na máquina do servidor SQL:

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

para vê -lo no aplicativo de gerenciamento em forma hexadecimal (Management Studio).

Assim, você pode, por exemplo, banco de dados de backup para arquivar (localmente no servidor) e fazer o download para outro lugar pela instrução acima.

Você precisa fazer isso no MGMT Studio? Veja como fazemos isso na linha CMD:

"C: Arquivos de Programas Microsoft SQL Server msSql binn textcopy.exe" /s <merver> /d <database> /t mytable /c myPictureBlob /f "c: picture.png" /w "onde recid " /I

Ok ... isso me levou muito tempo. A ferramenta SQL-Geragement Studio não é de coisas simples como essa (que eu notei antes ao procurar onde definir o tempo limite em consultas, e foi feito em 4 locais diferentes)

Baixei algum outro pacote de editor SQL (maestro SQL no meu caso). E eis que inclui um editor de blob, onde você pode olhar para os blobs e carregar novos blobs nesses campos.

Obrigado pela contribuição!

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top