|
Условие в 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 работает, ничего переводить не надо
|
|
Требовать и эффективности, и гибкости от одной и той же программы — все равно, что искать очаровательную и скромную жену... по-видимому, нам следует остановиться на чем-то одном из двух. Фредерик Брукс-младший