Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Web программирование > SQL, базы данных
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.12.2008, 11:53   #1
Veroonya
Пользователь
 
Аватар для Veroonya
 
Регистрация: 09.10.2008
Сообщений: 30
По умолчанию Update - Обновление всех записей

У меня есть запрос, выбирающий из таблицы все фамилии, имена отчества. Далее обновляются все имена случайным значением, выбранным из той же таблицы:

Код:
BEGIN TRANSACTION

SELECT TOP 10 
WM_PERSONAL_CARD.SURNAME, WM_PERSONAL_CARD.NAME,  WM_PERSONAL_CARD.SECONDNAME,A_SEX --пол
FROM 
WM_PERSONAL_CARD /* Личное дело гражданина */
ORDER BY WM_PERSONAL_CARD.ID

UPDATE WM_PERSONAL_CARD 
SET NAME = SHUFFLE.NAME
FROM (
  SELECT TOP 100 PERCENT NAME, A_SEX
  FROM WM_PERSONAL_CARD 
  WHERE A_SEX = 1
  ORDER BY newid()
) SHUFFLE
WHERE WM_PERSONAL_CARD.A_SEX=1 

ROLLBACK TRANSACTION
В результате получается, что все мужские имена (A_SEX=1) заменяются на одно и то же имя SHUFFLE.NAME.
Нужно сделать, чтоб каждая запись заменялась на РАЗНЫЕ имена.
Подскажите, как построить запрос?
Veroonya вне форума Ответить с цитированием
Старый 09.12.2008, 15:08   #2
AlexanderPeshkov
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 26
По умолчанию

насколько я знаю в sql нет рандома так что врядли что получится сделать он будет всегда брать первую запись в запросе, единственное что чтожно придумать это попробовать собрать свой небольшой рандом используя курсоры. да и мне интересно это так задуманно что после UPDATE ты откатываешь транзакцию?
AlexanderPeshkov вне форума Ответить с цитированием
Старый 10.12.2008, 06:24   #3
Veroonya
Пользователь
 
Аватар для Veroonya
 
Регистрация: 09.10.2008
Сообщений: 30
По умолчанию

Транзакция используется для того чтобы протестировать что получится, а базу при этом не затронуть)))
А можно как то обратиться к каждой строке таблицы отдельно и для нее случайным образом выбрать имя?
Veroonya вне форума Ответить с цитированием
Старый 12.12.2008, 12:16   #4
AlexanderPeshkov
Пользователь
 
Регистрация: 24.11.2008
Сообщений: 26
По умолчанию

да через курсор
declare cur cursor
for select поля которые тебе нужны для просмотра или изменения
from ******* имя таблицы которую ты будешь просматривать или изменения
open cur
fetch next from cur into @имя переменных для каждого поля из селекта через ,

BEGIN TRAN

while @@FETCH_STATUS = 0 --указывает удачно ли произошел один цикл как только записи закончатся в курсоре он вернет -1 и цыкл закончится
begin
update твоя таблица для которой был сделан курсор
set поле любое = любое занчение
where current of cur
fetch next from cur into @имя все тойже переменной
end

close cur
deallocate cur

COMMIT TRANSACTION
что то типа этого
AlexanderPeshkov вне форума Ответить с цитированием
Старый 15.12.2008, 13:42   #5
Veroonya
Пользователь
 
Аватар для Veroonya
 
Регистрация: 09.10.2008
Сообщений: 30
По умолчанию

AlexanderPeshkov пасиб вам ОГРОМНОЕ очень помогло)))
Veroonya вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Update данных KiSH333 БД в Delphi 2 01.12.2008 13:28
c# and Access - update MAcK Общие вопросы .NET 3 20.10.2008 12:58
update или исправление записей в таблицах. Roof БД в Delphi 4 15.08.2008 15:35
Удаление, обновление записей из MySQL таблицы xDjarx БД в Delphi 2 14.05.2008 13:36
UPDATE и DELETE Дамир БД в Delphi 3 13.03.2007 01:44