powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вычисляемые значения в SQL
17 сообщений из 17, страница 1 из 1
Вычисляемые значения в SQL
    #38259163
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 получала значение по мере выполнения запроса. Однако, значение сначала вычисляется, а потом присваивается всем записям.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38259493
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что значит "по мере выполнения запроса"? Вы считаете, что указанный подзапрос должен выполниться для каждой изменяемой записи?

Кроме того, смысл в таком подходе? Если вы апдейтите одну запись, то и такой подход будет верным. Если вам необходимо апдейтить все записи в новой выборке - то проще заполнить нужное поле при создании выборки.

Единственно, что я вижу - это если надо продолжить нумерацию в нескольких записях существующей таблицы. Но тогда непонятно, в каком именно порядке нумеровать эти записи... И пример, получается, ни о чём.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38259671
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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()
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38260468
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PaulWist,

если бы нужен был инкремент, я бы написал инкремент. А мне нужно некое вычисляемое значение.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38260769
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisА мне нужно некое вычисляемое значение.
Код: sql
1.
UPDATE ttt SET kod=RECNO()
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38260778
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

код - это код, а номер записи -прикинь что будет после первого же сжатия
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38260803
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сжатия чего? Курсора??
Иначе - неверно заданы условия, про что я упоминал выше. Не надо умалчивать критически важное...
Код: sql
1.
2.
3.
4.
5.
CALCULATE MAX(kod+1) TO lnKod
SCAN FOR EMPTY(kod)
	REPLACE kod WITH lnKod
	lnKod=lnKod+1
ENDSCAN
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38260883
PaulWist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisPaulWist,

если бы нужен был инкремент, я бы написал инкремент. А мне нужно некое вычисляемое значение.

Используйте ф-ию по аналогии с NewID()
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38260978
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если не нравится использование SCAN, и надо только SQL-методы, то можно примерно так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
CALCULATE MAX(kod) TO lnKod
CREATE cursor cur1 (rn n(4), kod i AUTOINC NEXTVALUE lnKod+1)
INSERT INTO cur1 (rn) SELECT RECNO() FROM ttt WHERE EMPTY(kod)

UPDATE ttt SET kod=cur1.kod from cur1 WHERE RECNO()=cur1.rn

USE IN cur1
SELECT ttt
BROWSE norm
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261255
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTM,

Есть достаточно большая таблица MSSQL - порядка 20000 записей. Нало склонировать в нее же отдельный блок, заменив пару полей. На тестовом примере этот блок -порядка 700 записей. Надо учесть, что параллельно могут работать неск. юзеров. Режим, конечно не частый, но ить кто-то и всунуться могет. Как оказалось uid записи и код сильно разорваны и не хочется делать такие пропуски кодов. (uid - порядка 260000, код - порядка 20000). можно, конечно и сканить. Можно сделать код=f(uid), но интересна сама тема SQL.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261258
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А причём здесь Фокс? Если вам нужно обработать данные на SQL-сервере - так и надо действовать средствами T-SQL, не стОит тягать данные на клиента.
Ну и выражения "кто-то может всунуться", "большая таблица порядка 20 тыс.записей" в контексте MSSQL как-то не звучат
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261260
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisЕсть достаточно большая таблица MSSQL - порядка 20000 записей. Нало склонировать в нее же отдельный блок, заменив пару полей.
Если это MS SQL - делаешь там временную таблицу (create table #MyTmp ... или select ... from MyTable into #MyTmp), заполняешь нужными данными, затем в одной транзакции (одним insert`ом) вставляешь ее содержимое в рабочую таблицу.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261268
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AndreTMСжатия чего? Курсора??
Иначе - неверно заданы условия, про что я упоминал выше. Не надо умалчивать критически важное...


я же не спрашиваю как мне обрабатывать таблицу. я спрашиваю о конструкции sql-update. и размеры таблиц в этом случае - это не критически важно, как и структура, связи, индексы.

AndreTM"большая таблица порядка 20 тыс.записей" в контексте MSSQL как-то не звучат
Опять ты о размерах. Не в размере счастье...


AndreTMА причём здесь Фокс?)
А фокс не причем. Прога на фоксе. Я же не о фоксе спрашиваю, а о конструкции SQL-Update. А это тестовый пример и cкуль-синтаксис похож.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261269
glamis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima T,
Этто понятно. Не понятно как с кодом быть. Хоцца иметь max на каждую итерацию, а не перед началом вставки.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261283
Dima T
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisХоцца иметь max на каждую итерацию, а не перед началом вставки.
Оберни в транзакцию, в начале получи в переменную max()+1 а потом бери из нее и увеличивай на 1
Я бы посоветовал всю транзакцию вынести в хранимую процедуру на MS SQL
glamisА фокс не причем. Прога на фоксе. Я же не о фоксе спрашиваю, а о конструкции SQL-Update. А это тестовый пример и cкуль-синтаксис похож.
Синтаксис похож, а подходы к его использованию кардинально отличаются.
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261296
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dima Tglamisсинтаксис похож.Синтаксис похож, а подходы к его использованию кардинально отличаются.Во-во...
Huesos на испанском означает отнюдь не то, что вы подумали (и ударение на втором слоге)...

Ну и не надо придумывать собственных подходов - уж где-где, а именно на ресурсе sql.ru эта задача прямо в faq находится...
...
Рейтинг: 0 / 0
Вычисляемые значения в SQL
    #38261300
Фотография AndreTM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
glamisНе понятно как с кодом быть. Хоцца иметь max на каждую итерацию, а не перед началом вставки.Дополню - ВЫ ХОТЯ БЫ ПРОВЕРИЛИ, КАК РАБОТАЮТ ВЫШЕПРИВЕДЁННЫЕ ПРИМЕРЫ? План выполнения посмотрели, например...
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вычисляемые значения в SQL
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]