|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
clos data all CREATE CURSOR ttt (kod n(4), naim C(10)) FOR i=1 TO 15 INSERT INTO ttt (naim) VALUES (REPLICATE(STR(i,3),5)) ENDf UPDATE ttt SET kod=(Sele MAX(kod+1) from ttt) BROWSE norm Хотелось бы, чтобы переменная kod получала значение по мере выполнения запроса. Однако, значение сначала вычисляется, а потом присваивается всем записям. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.05.2013, 20:51 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
Что значит "по мере выполнения запроса"? Вы считаете, что указанный подзапрос должен выполниться для каждой изменяемой записи? Кроме того, смысл в таком подходе? Если вы апдейтите одну запись, то и такой подход будет верным. Если вам необходимо апдейтить все записи в новой выборке - то проще заполнить нужное поле при создании выборки. Единственно, что я вижу - это если надо продолжить нумерацию в нескольких записях существующей таблицы. Но тогда непонятно, в каком именно порядке нумеровать эти записи... И пример, получается, ни о чём. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 03:28 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
glamisclos data all CREATE CURSOR ttt (kod n(4), naim C(10)) FOR i=1 TO 15 INSERT INTO ttt (naim) VALUES (REPLICATE(STR(i,3),5)) ENDf UPDATE ttt SET kod=(Sele MAX(kod+1) from ttt) BROWSE norm Хотелось бы, чтобы переменная kod получала значение по мере выполнения запроса. Однако, значение сначала вычисляется, а потом присваивается всем записям. Для поля kod надо использовать либо Autoinc либо NewID() ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 10:06 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
PaulWist, если бы нужен был инкремент, я бы написал инкремент. А мне нужно некое вычисляемое значение. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 15:21 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
glamisА мне нужно некое вычисляемое значение. Код: sql 1.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 17:23 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
AndreTM, код - это код, а номер записи -прикинь что будет после первого же сжатия ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 17:27 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
Сжатия чего? Курсора?? Иначе - неверно заданы условия, про что я упоминал выше. Не надо умалчивать критически важное... Код: sql 1. 2. 3. 4. 5.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 17:35 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
glamisPaulWist, если бы нужен был инкремент, я бы написал инкремент. А мне нужно некое вычисляемое значение. Используйте ф-ию по аналогии с NewID() ... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 18:26 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
Если не нравится использование SCAN, и надо только SQL-методы, то можно примерно так: Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9.
... |
|||
:
Нравится:
Не нравится:
|
|||
16.05.2013, 19:37 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
AndreTM, Есть достаточно большая таблица MSSQL - порядка 20000 записей. Нало склонировать в нее же отдельный блок, заменив пару полей. На тестовом примере этот блок -порядка 700 записей. Надо учесть, что параллельно могут работать неск. юзеров. Режим, конечно не частый, но ить кто-то и всунуться могет. Как оказалось uid записи и код сильно разорваны и не хочется делать такие пропуски кодов. (uid - порядка 260000, код - порядка 20000). можно, конечно и сканить. Можно сделать код=f(uid), но интересна сама тема SQL. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 06:26 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
А причём здесь Фокс? Если вам нужно обработать данные на SQL-сервере - так и надо действовать средствами T-SQL, не стОит тягать данные на клиента. Ну и выражения "кто-то может всунуться", "большая таблица порядка 20 тыс.записей" в контексте MSSQL как-то не звучат ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 06:34 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
glamisЕсть достаточно большая таблица MSSQL - порядка 20000 записей. Нало склонировать в нее же отдельный блок, заменив пару полей. Если это MS SQL - делаешь там временную таблицу (create table #MyTmp ... или select ... from MyTable into #MyTmp), заполняешь нужными данными, затем в одной транзакции (одним insert`ом) вставляешь ее содержимое в рабочую таблицу. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 06:35 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
AndreTMСжатия чего? Курсора?? Иначе - неверно заданы условия, про что я упоминал выше. Не надо умалчивать критически важное... я же не спрашиваю как мне обрабатывать таблицу. я спрашиваю о конструкции sql-update. и размеры таблиц в этом случае - это не критически важно, как и структура, связи, индексы. AndreTM"большая таблица порядка 20 тыс.записей" в контексте MSSQL как-то не звучат Опять ты о размерах. Не в размере счастье... AndreTMА причём здесь Фокс?) А фокс не причем. Прога на фоксе. Я же не о фоксе спрашиваю, а о конструкции SQL-Update. А это тестовый пример и cкуль-синтаксис похож. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 07:16 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
Dima T, Этто понятно. Не понятно как с кодом быть. Хоцца иметь max на каждую итерацию, а не перед началом вставки. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 07:19 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
glamisХоцца иметь max на каждую итерацию, а не перед началом вставки. Оберни в транзакцию, в начале получи в переменную max()+1 а потом бери из нее и увеличивай на 1 Я бы посоветовал всю транзакцию вынести в хранимую процедуру на MS SQL glamisА фокс не причем. Прога на фоксе. Я же не о фоксе спрашиваю, а о конструкции SQL-Update. А это тестовый пример и cкуль-синтаксис похож. Синтаксис похож, а подходы к его использованию кардинально отличаются. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:14 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
Dima Tglamisсинтаксис похож.Синтаксис похож, а подходы к его использованию кардинально отличаются.Во-во... Huesos на испанском означает отнюдь не то, что вы подумали (и ударение на втором слоге)... Ну и не надо придумывать собственных подходов - уж где-где, а именно на ресурсе sql.ru эта задача прямо в faq находится... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:32 |
|
Вычисляемые значения в SQL
|
|||
---|---|---|---|
#18+
glamisНе понятно как с кодом быть. Хоцца иметь max на каждую итерацию, а не перед началом вставки.Дополню - ВЫ ХОТЯ БЫ ПРОВЕРИЛИ, КАК РАБОТАЮТ ВЫШЕПРИВЕДЁННЫЕ ПРИМЕРЫ? План выполнения посмотрели, например... ... |
|||
:
Нравится:
Не нравится:
|
|||
17.05.2013, 08:36 |
|
|
start [/forum/topic.php?fid=41&msg=38259163&tid=1583048]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
48ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
58ms |
get tp. blocked users: |
2ms |
others: | 17ms |
total: | 174ms |
0 / 0 |