Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Конвертация binary в строку, и обратная конвертация в binary  [new]
ixilimuse
Member

Откуда:
Сообщений: 13
Доброго времени суток, коллеги! И с наступающим Новым Годом ! :)

Что-то никак не могу сообразить одну штуку. Может подкините идейку?

Есть у меня таблица. В ней есть поле формата binary(16). В этом поле храниться GUID в формате binary.

Теперь я беру и вытаскиваю данные из таблицы. Внутри программы полученные значения хранятся в виде строки. Такую строку возвращает как запрос, так и можно вытащить с помощью функции:

master.dbo.fn_varbintohexstr(exp)


Теперь я передаю из приложения полученную строку обратно в MS SQL. И хочу из этой строки обратно получить значение binary(16). Но пока так и не получается это сделать.

Я пробовал по разному..
Select 
'0xa8ed00221591466911e17da9fd549878' as String,
Convert(nvarchar,cast(N'0xa8ed00221591466911e17da9fd549878' as binary(16))) as Bin,
CAST(Convert(binary(16),'0xa8ed00221591466911e17da9fd549878') as varchar(32)) as bin2,
Convert(varbinary,'0xa8ed00221591466911e17da9fd549878') as bin3,
Convert(binary(16),cast(master.dbo.fn_cdc_hexstrtobin(N'0xa8ed00221591466911e17da9fd549878')as nvarchar(34))) as bin4

Наиболее близок к истине bin2 и bin4 поля. Они начинают формировать все правильно. Но проблема в том что при преобразовании теряется часть данных .
То есть, bin2 возвращает "0xa8ed0022159146", а bin4 возвращает "0xA8ED00221591466911E1000000000000". То есть часть последних битов где-то теряются.

Хотя по заявлению fn_cdc_hexstrtobin позволяет преобразовать строку длиной в nvarchar(40). Как быть - не могу понять. Уже пробовал различные комбинации конвертации. Но в итоге все равно не могу вытащить последние биты данных.

Думал может проблема именно с отображением. И пробовал делать вставку во временную таблицу:
		Create table #IDList(ID binary(16))
		Insert into  #IDList(ID)
		Values(cast(master.dbo.fn_cdc_hexstrtobin(N'0xa8ed00221591466911e17da9fd549878') as binary(16)))


Но в итоге помещаемые данные имеют такое же значение как в выше приведеном селекте.

Буду рад любому совету. Спасибо.
28 дек 12, 14:49    [13700868]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация binary в строку, и обратная конвертация в binary  [new]
Сон Веры Павловны
Member

Откуда:
Сообщений: 5975
ixilimuse,

declare
  @s varchar(50);
set @s='0xa8ed00221591466911e17da9fd549878';
select CONVERT(xml,'').value('xs:hexBinary(substring(sql:variable("@s"),3))','binary(16)') -- MSSQL 2005
select CONVERT(binary(16),@s,1); -- MSSQL>=2008 
28 дек 12, 15:13    [13701004]     Ответить | Цитировать Сообщить модератору
 Re: Конвертация binary в строку, и обратная конвертация в binary  [new]
ixilimuse
Member

Откуда:
Сообщений: 13
Сон Веры Павловны, большущее спасибо! Заработало))

Ссори, забыл указать что версия SQL = 2008. Но вариант для 2005, возможно пригодится тоже.
Надо больше мне читать литературы по функционалу )) Ещё раз благодарю за помощь :)
28 дек 12, 15:24    [13701118]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить