Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исправление поля image / 16 сообщений из 16, страница 1 из 1
02.09.2019, 13:04
    #39856248
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
при записи в поле image данных в формате Base64 записался символ #0 осле каждых двух битов. Произошло из-за неверного преобразования данных в толстом клиенте.
т.е.:
записалось :
Код: sql
1.
0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E


а должно быть:
Код: sql
1.
0x4A564245526930784C6A514B4A654C6A7A394D4B4E



как мне убрать эти нули запросом (sql 2008)?
...
Рейтинг: 0 / 0
02.09.2019, 13:06
    #39856250
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
Не конвертировать в юникодную строку по дороге.
...
Рейтинг: 0 / 0
02.09.2019, 13:11
    #39856251
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
как исправить ошибку в толстом клиенте я знаю.
Как исправить уже созданные неверные строки в БД sql запросом?
...
Рейтинг: 0 / 0
02.09.2019, 13:12
    #39856253
iap
iap
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
Петр,

однако, почему бы не изменить тип IMAGE на VARBINARY(MAX)?
...
Рейтинг: 0 / 0
02.09.2019, 13:18
    #39856254
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
и что дальше?
...
Рейтинг: 0 / 0
02.09.2019, 13:20
    #39856255
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
Петр,

Приемрно так: достать из image и отконвертить varbinary -> nvarchar -> varchar -> varbinary -> image.
Но лучше сначала image в varbinary, как советуют.
...
Рейтинг: 0 / 0
02.09.2019, 13:22
    #39856256
Гавриленко Сергей Алексеевич
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
Код: sql
1.
2.
3.
4.
5.
6.
declare
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

select
    @bin
    ,  cast ( cast (  cast( @bin as nvarchar (100) ) as varchar (100) ) as varbinary (100) )  
...
Рейтинг: 0 / 0
02.09.2019, 13:30
    #39856259
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
да вроде получается
Код: sql
1.
s4 = convert(image, convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))))



вопрос только в том хватит ли размера nvarchar(MAX)?
...
Рейтинг: 0 / 0
02.09.2019, 13:33
    #39856260
TaPaK
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
Петрда вроде получается
Код: sql
1.
s4 = convert(image, convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))))



вопрос только в том хватит ли размера nvarchar(MAX)?
2Гб?
...
Рейтинг: 0 / 0
02.09.2019, 13:45
    #39856270
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
TaPaKПетрда вроде получается
вопрос только в том хватит ли размера nvarchar(MAX)?
2Гб?

да 2 хватит.

Возникла следующая проблема. Сейчас в БД часть данных неверных, часть верных. Поидее преобразование не должно повлиять на верные данные. Но это по факту не так:

Код: sql
1.
2.
3.
4.
5.
6.
7.
select 
fblob,
s = convert(VARBINARY(MAX), fblob), 
s1 = convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)), 
s2 = convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob))), 
s3 = convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))),
s4 = convert(image, convert(varbinary(max), convert(varchar(MAX), convert(nvarchar(MAX), convert(VARBINARY(MAX), fblob)))))



результат
...
Рейтинг: 0 / 0
02.09.2019, 13:51
    #39856273
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
полный результат
из-за чего это может быть?
...
Рейтинг: 0 / 0
02.09.2019, 14:32
    #39856299
aleks222
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
Чо, не судьба проверить второй байт на 0 перед преобразованием?

ЗЫ. Можно ишо 3-й и 5-й байт проверить для вящей надежности...
...
Рейтинг: 0 / 0
02.09.2019, 15:55
    #39856349
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
aleks222Чо, не судьба проверить второй байт на 0 перед преобразованием?

ЗЫ. Можно ишо 3-й и 5-й байт проверить для вящей надежности...

и как мне считать второй байт в sql?
...
Рейтинг: 0 / 0
02.09.2019, 16:13
    #39856359
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
Петрaleks222Чо, не судьба проверить второй байт на 0 перед преобразованием?

ЗЫ. Можно ишо 3-й и 5-й байт проверить для вящей надежности...

и как мне считать второй байт в sql?
Вы не поверите, через SUBSTRING.

Код: sql
1.
2.
3.
4.
5.
declare
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

SELECT @bin
WHERE SUBSTRING(@bin, 2, 1) = 0x00 AND SUBSTRING(@bin, 4, 1) = 0x00
...
Рейтинг: 0 / 0
02.09.2019, 16:21
    #39856366
Minamoto
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
MinamotoПетрпропущено...


и как мне считать второй байт в sql?
Вы не поверите, через SUBSTRING.

Код: sql
1.
2.
3.
4.
5.
declare
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

SELECT @bin
WHERE SUBSTRING(@bin, 2, 1) = 0x00 AND SUBSTRING(@bin, 4, 1) = 0x00


Для надежности можно все четные байты проверить:

Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
CREATE TABLE #vb 
(
    c varbinary(100)
);

DECLARE
    @bin varbinary (100) = 0x4A0056004200450052006900300078004C006A0051004B004A0065004C006A007A0039004D004B004E

INSERT INTO #vb (c)
SELECT @bin 
UNION all
SELECT CAST ( cast (  cast( @bin as nvarchar (100) ) as varchar (100) ) as varbinary (100) )  


SELECT *
FROM #vb
WHERE 
    NOT EXISTS (
        SELECT 
            * 
        FROM 
            dbo.number
        WHERE 
            number < LEN(c) / 2 AND SUBSTRING(c, number * 2, 1) > 0x00
    )
...
Рейтинг: 0 / 0
02.09.2019, 16:52
    #39856380
Петр
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Исправление поля image
спасибо всем за помощь.
...
Рейтинг: 0 / 0
Форумы / Microsoft SQL Server [игнор отключен] [закрыт для гостей] / Исправление поля image / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]