Страница 1 из 1

Конвертация NRec (MS SQL)

Добавлено: 30 июн 2010, 11:28
bezpal
Добрый день.

Подскажите, пожалуйста, как нужно правильно конвертировать NREC в MS SQL?
Есть запрос:

SELECT convert(varchar, n.f$NRec) as TST FROM t$NastrOS n WHERE n.f$TIDK=15 and n.f$Name='Национальный'

В этом случае запрос возвращает какой то один непонятный символ.

Если написать convert(int, n.f$NRec) - то выдает значение 2, когда:
NRec=0000000000000002h
NRec=0001000000000002h
т.е. значение не уникально. Конвертировать нужно, чтобы задать условие по NRec в конструкции WHERE.

Заранее, огромное спасибо.

Re: Конвертация NRec (MS SQL)

Добавлено: 30 июн 2010, 12:10
Polimer
У нас используется такая UDF:

Код: Выделить всё

CREATE FUNCTION fnNRecToID(@NRec VARBINARY(8))
RETURNS BIGINT
BEGIN
  DECLARE @Result BIGINT
  IF ISNULL(@NREC, 0) != 0 
    SELECT @Result = CONVERT(BIGINT, @NRec) - CONVERT(BIGINT, 0x8000000000000000)  
  ELSE
    SELECT @Result = 0
  RETURN(@Result)
END

Re: Конвертация NRec (MS SQL)

Добавлено: 30 июн 2010, 13:07
Masygreen

Код: Выделить всё

да да .. наш вариант
CAST(F$NREC as bigint) - cast(0x8000000000000000 as BIGINT) as NREC,

Re: Конвертация NRec (MS SQL)

Добавлено: 30 июн 2010, 13:09
Masygreen
Но есть проблема - на некоторых данных это преобразование сыпется ...
например если nRec = 0x7FFFFFFFFFFFFFFF

Re: Конвертация NRec (MS SQL)

Добавлено: 30 июн 2010, 14:14
bezpal
Огромное спасибо! Работает!

У нас я таких гигантских NRec'ов не встречал пока.

А может быть знаете еще как можно получить значение MEMO? Есть таблица t$ALLMEMO, вывожу из нее поле f$MEM, а выводится либо "ИСТИНА" либо ничего. Читал где-то тут, что все мемо лежат в таблице xx$MEMO, но как их связать и как оттуда получить данные непонятно.

Re: Конвертация NRec (MS SQL)

Добавлено: 02 июл 2010, 15:52
Masygreen
код не дам .. хз где он .. но направление укажу ... делал давно но вряд ли щас чего то поменялось
получаете поле мемо .. через Cast его в char(500) ну или сколько вам там понравиться - далее посимвольно перекодируете в нужную кодировку ... как то так...