У меня есть задача очистки некоторых наших данных в SQL Server 2008 для CS2009.В нашей базе данных профилей есть две таблицы:
- Адреса
UserObject
Адрес:
address_id, line1, line2 guid, varchar, varchar
UserObject:
userid_id, addressguids, acitivtydate guid, varchar, datetime
Мне нужно удалить все UserObjects, которые старше, чем X (т.е. не имели активности).Это, очевидно, не проблема.Моя проблема возникает, когда я хочу удалить адреса, которые принадлежат этому человеку.Они хранятся в одном поле в определенном порядке.Например, если у пользователя есть 2 адреса, он может выглядеть примерно так:
2;{guid1};{guid2}
Первое число - это число направляющих, разделенных точкой с запятой.В таблице адресов нет поля для user_id, чтобы можно было связать его (очень раздражает).Единственный идентификатор в таблице адресов - это адресный указатель.
Мой вопрос заключается в том, как я могу разобраться в этом в SQL (мой sql немного плох).Я хотел бы представить, что это будет что-то вроде:
- выбрать всех пользователей, где ActivityDate> X
- разделить строку guid адреса на части и получить каждую guid
- удалить каждую guid втаблица адресов
- удалить пользователя
Я думаю, что удалить адреса можно подстрокой или чем-то таким, чтобы удалить начальный номер и точку с запятой, затем заменить остальные точки с запятой на запятые и поместить их вкогда IN.
Я не имею ни малейшего понятия о цикле, лучших способах сделать это и тому подобное.
Спасибо