|
12.05.2006, 11:27 | #1 |
Участник
|
Переменная в select
Здравствуйте вам дамы и господа!!!!!!!!
В сиквеле есть такая возможность - указывать переменную в селекте например declare @s varchar(10)
set @s ='ВОВан' select @s, field1,field2 from table1 Вот есть огромная потребность указать вот так же переменную в селекте аксапты, но в лоб это сделать не получается. Может кто знает как это сделать либо напрямую либо как то в обход. способ вставить с пустым полем, а потом проапдейтить пустое не подходит, так как режим многопользовательский и кто то может влезть. Жду ответа как кто то там лета Спасибо |
|
12.05.2006, 11:37 | #2 |
Участник
|
А зачем вам что-то апдейтить? Вы получаете данные в табличную переменную и можете изменить поле в ней без записи в б/д.
Что-то типа X++: while select from MyTable { MyTable.MyField = MyValue; // что-то делаете с MyTable }
__________________
Axapta v.3.0 sp5 kr2 |
|
12.05.2006, 11:56 | #3 |
Участник
|
не совсем подходит данный способ, так как в данном случае идет обработка по одной записи, чего хотелось бы избежать, дело в том что используется там конструкция групповой вставки
insert_recordset table1(...) select .... |
|
12.05.2006, 12:07 | #4 |
Участник
|
Может этом случае будет проще воспользоваться прямым запросом на сервер (insert into ... select from)?
__________________
Axapta v.3.0 sp5 kr2 |
|
12.05.2006, 12:09 | #5 |
злыдень
|
Через АДО наверно только так можно извратиться
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
12.05.2006, 12:28 | #6 |
Участник
|
через адо и через сиквел не катит потому что RECId автоматически не сгенериться а треба чтобы было
|
|
12.05.2006, 12:38 | #7 |
Moderator
|
Цитата:
Сообщение от Goldy
через адо и через сиквел не катит потому что RECId автоматически не сгенериться а треба чтобы было
|
|
12.05.2006, 13:26 | #8 |
Moderator
|
Цитата:
Сообщение от AndyD
У меня тут мысль пришла - использовать промежуточную таблицу для занесения таких констант.
Цитата:
Сообщение от Goldy
через адо и через сиквел не катит потому что RECId автоматически не сгенериться
|
|
12.05.2006, 12:33 | #9 |
злыдень
|
упс.. А можете скинуть условие задачки? Может просто лень имена полей перечислить?
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
12.05.2006, 12:33 | #10 |
Участник
|
Можно и ч/з Connection, но тут встает вопрос - как заполнять RecID?
__________________
Axapta v.3.0 sp5 kr2 |
|
12.05.2006, 12:38 | #11 |
злыдень
|
Первый раз вижу вопрос от AndyD, наверно риторический
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
12.05.2006, 12:44 | #12 |
Участник
|
через апдейт не катит, так как это поле будет учавствовать в ссылочной целостности и если в него что то левое проскочит то будут нарушены данные сильно
Еще если есть мысли пожалуйста не стесняйтесь и всем помогающим спасибо |
|
12.05.2006, 12:48 | #13 |
Moderator
|
Цитата:
Сообщение от Goldy
через апдейт не катит, так как это поле будет учавствовать в ссылочной целостности и если в него что то левое проскочит то будут нарушены данные сильно
А о какой ссылочной целостности речь? У вас какие-то свои триггеры и констрэйнты в сиквеле включены? |
|
12.05.2006, 12:53 | #14 |
Участник
|
Ссылочнось логическая а не физическая
по связям нужное мне поле никак не подпихнуть по этому и есть желание как то впихнуть нужного мне поля через переменную |
|
12.05.2006, 12:55 | #15 |
злыдень
|
т.е. заинсертить все махом, а потом одним апдэйтрекрдсетом в одной транзакции всё проапдэйтить тоже не катит?!?
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|
12.05.2006, 13:00 | #16 |
Moderator
|
Цитата:
Сообщение от Recoilme
т.е. заинсертить все махом, а потом одним апдэйтрекрдсетом в одной транзакции всё проапдэйтить тоже не катит?!?
Цитата:
Сообщение от Goldy
Ссылочнось логическая а не физическая
|
|
12.05.2006, 12:59 | #17 |
Участник
|
Не уверен, что понял условия задачи, но можно попробовать через макросы. (Пример - макрос InventDimJoin). На каком этапе становится известным значение переменной?
|
|
12.05.2006, 13:19 | #18 |
Участник
|
У меня тут мысль пришла - использовать промежуточную таблицу для занесения таких констант. Затем в insert_recordset делать join этой таблицы с основной
Т.е. что-то типа этого X++: static void Job112(Args _args) { Table20 table20; Table20 table20_; table19 table19; table21 table21; ; ttsbegin; table20.initValue(); table20.field1 = 1000; table20.insert(); insert_recordset table19 (field1, field2) select field1 from table21 join field1 from table20_ where table20_.recId == table20.recId; table20.delete(); ttscommit; }
__________________
Axapta v.3.0 sp5 kr2 |
|
|
За это сообщение автора поблагодарили: Goldy (1), alman (0). |
12.05.2006, 13:29 | #19 |
Administrator
|
Обычно это делается через while select:
X++: CustTable custTable; MyTable myTable; ; while select custTable { myTable.clear(); myTable.fieldForConst = MyConstant; myTable.AccountNum = custTable.AccountNum; ..... myTable.insert(); } X++: RecordInsertList ril; CustTable custTable; MyTable myTable; ; ril = new RecordInsertList(tablenum(MyTable)); while select custTable { myTable.clear(); myTable.fieldForConst = MyConstant; myTable.AccountNum = custTable.AccountNum; ..... ril.add(myTable); } ril.insertDataBase();
__________________
Возможно сделать все. Вопрос времени Последний раз редактировалось sukhanchik; 12.05.2006 в 13:33. |
|
12.05.2006, 13:43 | #20 |
злыдень
|
Цитата:
Сообщение от sukhanchik
В этом случае вы получите весьма шуструю вставку (по данным ребят, которые исследовали этот класс - по сравнению с предыдущим способом - раз в 10 быстрее, однако я лично не могу ни подтвердить ни опровергнуть это утверждение. Могу сказать лишь что автором утверждения является г-н db )
и на больших объемах лучше пачками тыщ по 5-10 insertDataBase() вызывать
__________________
Ибо зло есть лучшая сила человека. "Человек должен становиться все лучше и злее" -- так учу я. /Ф. Ницше/ |
|