Informação básica
- Banco de dados: SQL Server Express 2008 R2
- Cliente: SQL Server Management Studio
Backround (pular se não estiver interessado):
Um projeto que estou mantendo usa um ORM, que aparentemente armazenou meus valores enum (que herdam de Byte) em objetos .Net serializados binários armazenados em um campo varbinary(max). Só descobri que isso estava acontecendo depois que surgiu um novo requisito ditando que meu código fosse executado em confiança média. Como o formatador binário .Net precisa de confiança total para ser chamado, ele começou a travar nos enums.
Para limpar a bagunça, preciso criar scripts de migração que converterão esses valores (varbinary(max)) de volta em valores inteiros. Existem apenas alguns valores diferentes, portanto não deve ser um grande problema (pensei).
O problema :
Consigo obter representações de string dos blobs ao selecionar:
SELECT BinValue FROM MyTable where Type = 'Object';
Ele retorna uma string '0x...(uma matriz de valores hexadecimais)'.
Mas quando tento selecionar na coluna usando copiar e colar, certificando-me de ter o equivalente binário exato:
SELECT ItemId FROM MyTable WHERE Value=convert(varbinary(max), '0x...')
não retorna nenhum registro.
Então é possível resolver isso usando um cliente (como o Management Studio)?
Se sim, qual seria a sintaxe correta?
Apenas faça
Você está convertendo a
varchar
representaçãovarbinary(max)
que não está correta.SELECT CONVERT(VARBINARY(MAX), '0xAAFF')
retorna0x307841414646
para mim, por exemplo. Ele fornecerá um resultado com base nos códigos de caractere nessa representação de string na página de código do agrupamento padrão.