0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 5
1

Почистить все таблицы, базы данных

11.06.2012, 06:05. Показов 7245. Ответов 9
Метки нет (Все метки)

Добрый день. Помогите балбесу написать SQL запрос
Задача:
Почистить все таблицы, базы данных таким образом что бы в них остались данные только за последние 10 дней .

База на MSSQL 2005 Express Edition.
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.06.2012, 06:05
Ответы с готовыми решениями:

Как загрузить в DataSet все таблицы базы данных?
Не пойму как загрузить данные из всех таблиц в датасет. Во всех примерах при создании...

Все данные таблиц одной базы необходимо добавить в таблицы такой же базы.
В FoxPro я могу обойтись двумя операторами на на каждую таблицу: use А append from В и все...

Создать таблицы базы данных. Соединить их соответствующими связями. Заполнить таблицы записями (по 10 шт.)
Помогите пожалуйста, может образец какой-то есть у кого, на самообучение дали Access. И задачки......

Вставка данных в Вордовский документ из базы данных или таблицы Аксесс
доброго времени суток. Помогите решить задачу: хочу сделать базу данных и вставлять в текст...

9
624 / 495 / 43
Регистрация: 05.07.2010
Сообщений: 1,589
11.06.2012, 08:09 2
SQL
1
2
DECLARE @DT DateTime SET @DT=GetDate() - DATEPART (DAY, -10)
DELETE FROM tablename WHERE datetimefieldname < @DT
0
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 5
13.06.2012, 21:27  [ТС] 3
Цитата Сообщение от ksk Посмотреть сообщение
SQL
1
2
DECLARE @DT DateTime SET @DT=GetDate() - DATEPART (DAY, -10)
DELETE FROM tablename WHERE datetimefieldname < @DT
Выполнил данный запрос, но вместо результата получил лишь названия всех полей таблицы.
В чем может быть проблема?
0
1426 / 893 / 340
Регистрация: 31.05.2012
Сообщений: 3,137
13.06.2012, 22:10 4
delete нужно выполнить для каждой таблицы, вместо tablename подставив имя таблиы и вместо datetimefieldname имя поля в этой таблице, по которому анализ даты. Если такого поля нет, то по указанному условию ничего не удалится
0
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 5
13.06.2012, 22:17  [ТС] 5
Цитата Сообщение от Аватар Посмотреть сообщение
delete нужно выполнить для каждой таблицы, вместо tablename подставив имя таблиы и вместо datetimefieldname имя поля в этой таблице, по которому анализ даты. Если такого поля нет, то по указанному условию ничего не удалится
Я все именно так и делаю, но в итоге получаю пустой датасет, который содержал все поля таблицы, но в котором не было ни одной записи. Таблица содержит данные за последние 12 дней то есть согласно условию она должна была мне вернуть данные за первые два дня?

пробовал еще и так

select * from theTable
where datetime_field < dateadd( day, -10, getdate() )
но результат тот же.
0
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
14.06.2012, 11:12 6
Сделайте запрос:
SQL
1
SELECT * FROM theTable
Чтобы убедиться, что данные действительно есть.
Затем

SQL
1
2
DELETE  FROM theTable
WHERE datetime_field < dateadd( DAY, -10, getdate() )
0
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 5
14.06.2012, 23:05  [ТС] 7
Цитата Сообщение от Remmor Посмотреть сообщение
Сделайте запрос:
SQL
1
SELECT * FROM theTable
Чтобы убедиться, что данные действительно есть.
Затем

SQL
1
2
DELETE  FROM theTable
WHERE datetime_field < dateadd( DAY, -10, getdate() )
Почистить все таблицы, базы данных


Запрос выполнился, но возникла следующая неприятность идет привязка по времени в результате чего выделяются не все данные удовлетворяющие условию запроса. Как сделать так чтобы в расчет бралась только дата не привязываясь ко времени.
0
1426 / 893 / 340
Регистрация: 31.05.2012
Сообщений: 3,137
15.06.2012, 00:40 8
CONVERT (varchar,datetime_field, 112) убирает время и преобразует дату в "GGGGMMDD"
можно применить это преобразование к обеим стронам условия сравнения
1
71 / 71 / 23
Регистрация: 02.02.2012
Сообщений: 309
15.06.2012, 05:38 9
Цитата Сообщение от akasha9 Посмотреть сообщение
Запрос выполнился, но возникла следующая неприятность идет привязка по времени ...
Вообще, по моему мнению, это не неприятность, а это правильное решение задачи. Если обновление было в 13.00 а сейчас 12.00 то десятый день еще не прошел.

А так я бы предложил такое решение:
SQL
1
2
3
4
DELETE *FROM theTable
WHERE CAST (GETDATE () - datetime_field AS FLOAT) > 10   (учитываем время)
или
WHERE DATEDIFF (dd, GETDATE (), datetime_field) > 10 (не учитываем время)
1
0 / 0 / 0
Регистрация: 11.06.2012
Сообщений: 5
18.06.2012, 20:52  [ТС] 10
Все проблема решена всем откликнувшимся огромное спасибо.

Решил с помощью такого решения:

SQL
1
2
DELETE *FROM theTable
WHERE CONVERT (VARCHAR,datetime_field, 112) < dateadd( DAY, -10, getdate() )
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.06.2012, 20:52
Помогаю со студенческими работами здесь

LINQ2DB : имея классы описывающие таблицы базы данных сгенерировать непосредственно базу данных
Добрый день. Подскажите, можно ли имея классы описывающие таблицы базы данных сгенерировать...

Как сделать экспорт данных из таблицы базы данных MSSQL 2008 в Excel на php?
Добрый день. Подскажите как сделать экспорт данных из таблицы базы данных MSSQL 2008 в Excel ?...

Вывод данных из базы данных в определенные строки таблицы
Имеется страница на которую необходимо из бд с названием opis вывести данные названия ЖК из столбца...

Необходимо разбить данный перечень на таблицы и связать их в схеме данных. Нужно для создания базы данных
Перечень: Город, название вокзала, ФИО начальника, телефон, номер поезда, тип вагона,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru