Имя: Пароль:
1C
1С v8
Условие в ms sql
,
0 gosn1ck
 
17.01.18
10:21
Всем привет!
подскажите, как в ms sql сделать аналог следующего условия?

ГДЕ
ТоварыНаСкладах.Регистратор ССЫЛКА Документ.ПоступлениеТоваровИзПереработки

а именно преобразовать вид сравнение "ССЫЛКА"
1 Asakra
 
17.01.18
10:34
(0) как-то так: where tab.Регистратор = 0x000000DB
2 Ненавижу 1С
 
гуру
17.01.18
10:43
where _RecorderTRef=0x0000227A
3 gosn1ck
 
17.01.18
10:52
спасибо, а что такое 0x0000227A? это же не строке верно? как указать это значение?
подключаюсь к базе как к внешнему источнику
4 Asakra
 
17.01.18
11:02
5 AlfaDog
 
17.01.18
11:06
Where tab.Регистратор in (select guid from таблица документа)
6 MrStomak
 
17.01.18
11:09
(5)
Ты воистину опасный человек!
7 Ёпрст
 
17.01.18
11:10
(0)
_RecorderRRef - регистратор
RecorderTRef - тип ссылки регистратора,
длина 4 байта, хранит идентификатор типа документа-регистратора в шестнадцатеричном виде.
например, 0x0000008F - это 143 в десятичной, т.е тип документа_Document143
т.е тебе нужно найти имя таблички нужного типа и перевести его название (цифровую часть) в 16-ое число. Усё

ЗЫ: Имя таблички  получаешь из получаешь ПолучитьСтруктуруХраненияБазыДанных
8 бомболюк
 
17.01.18
11:23
(7) проще в условии писать
where cast(RecorderTRef as int) = 143 ;-)
9 MrStomak
 
17.01.18
11:25
(8)
Проще.
Но совсем не факт, что MS SQL при этом сможет использовать индекс ByRecorder.
А вот в варианте (7) проблем с этим не будет точно.
10 бомболюк
 
17.01.18
11:28
(9) ну тогда так
where RecorderTRef = cast(143 as binary(4))
11 MrStomak
 
17.01.18
11:35
(10)
Щас посмотрел, да, так работает.
Только не забывать еще условие по разделителю всегда ставить.
12 gosn1ck
 
17.01.18
11:47
всем спасибо, но у меня чёртов внешний источник данных. и как применить к нему функцию cast я пока не сообразил :(

видимо сбил вас с толку заголовком с ms sql
13 бомболюк
 
17.01.18
11:52
(12) попробуй, может и без cast проканать. просто
where RecorderTRef = 143
14 arsik
 
гуру
17.01.18
11:59
(13) Можно прямо так записать "where RecorderTRef = 0x0000008F"
Только перед этим нужно 143 в 16ричный превратить
15 бомболюк
 
17.01.18
12:02
(14) вариант в (13) в ms sql работает, ничего переводить не надо