Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Удаление по циклу в таблицах БД  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 698
SQL Server 2005

В базе имеется порядка 200 таблиц

Имя таблиц имеет формат "T_Table_2012_01_31_00_00_00" ... и так до "T_Table_2013_09_25_00_00_00"

И для каждой из этих таблиц я выполняю один и тот же запрос на выборку (чисто для своей проверки правильности выборки перед ее удалением) и УДАЛЕНИЕ

Как мне можно облегчить свою работу и написать процедуру или еще что-нибудь в этом духе на уровне СУБД. Чтобы мой запрос выполнялся по циклу только для всех таблиц базы, имеющих указанный выше формат в своем названии. И результаты запроса на выборку объединились. Чтобы я первоначально смогла удостовериться в правильном формировании итоговой выборки, которую я хочу их этих таблиц УДАЛИТЬ.
25 сен 13, 10:49    [14881024]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
https://www.sql.ru/faq/faq_topic.aspx?fid=104
25 сен 13, 10:52    [14881043]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 698
концепция правильная? или я не то навояла?

USE My_DB
DECLARE @SQL varchar(8000), @table_name varchar(20), @var1 varchar(100), @My_DATE Date(),
@My_DATE_STR varchar(20) 
SET @var1='Иванов'
SET @My_DATE='31.01.2012'
SET @table_name='T_Table_'
WHILE "есть таблицы формата T_Table_ГГГГ_ММ_ЧЧ_00_00_00"
 BEGIN
  SET @My_DATE=@My_DATE+1
  SET @My_DATE_STR=(преобразовать @My_DATE в формат ГГГГ_ММ_ЧЧ)
  SET @table_name=@table_name+@My_DATE_STR+'_00_00_00'
  SET @SQL = 'SELECT * FROM ' + @table_name +'where Field_1='+@var1
  exec(@SQL)
 END
25 сен 13, 11:40    [14881403]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
Glory
Member

Откуда:
Сообщений: 104760
Ольга Семенова
концепция правильная?

Концепция правильная. Но дъявол как всегда кроется в деталях
Правильнее всего будет сделать одну таблицу
Или хотя бы секционированное представление
25 сен 13, 11:44    [14881434]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 698
Glory
Ольга Семенова
концепция правильная?

Концепция правильная. Но дъявол как всегда кроется в деталях
Правильнее всего будет сделать одну таблицу
Или хотя бы секционированное представление


упс... усе.. дальнейшие мои знания основ MS SQL закончились
25 сен 13, 11:57    [14881512]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 782
Ольга Семенова
SQL Server 2005

В базе имеется порядка 200 таблиц

Имя таблиц имеет формат "T_Table_2012_01_31_00_00_00" ... и так до "T_Table_2013_09_25_00_00_00"

И для каждой из этих таблиц я выполняю один и тот же запрос на выборку (чисто для своей проверки правильности выборки перед ее удалением) и УДАЛЕНИЕ

Как мне можно облегчить свою работу и написать процедуру или еще что-нибудь в этом духе на уровне СУБД. Чтобы мой запрос выполнялся по циклу только для всех таблиц базы, имеющих указанный выше формат в своем названии. И результаты запроса на выборку объединились. Чтобы я первоначально смогла удостовериться в правильном формировании итоговой выборки, которую я хочу их этих таблиц УДАЛИТЬ.


Это что, для каждой недели отдельная таблица? Кто Вас так научил делать? Для начала все эти таблицы должны быть объединены в одну, при условии что структура таблиц идентична. Не забудьте удостоверится что имеется поле типа datetime, где будут хранится даты, и по которому нужно будет построить индекс, а уж потом можно приступать к написанию процедуры удаления данных.
25 сен 13, 12:51    [14881821]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 698
таблицы формируются каждый день автоматически - в каждой порядка 100 000 записей. Есть утилита, которая работает с этими таблицами по описанному мной алгоритму для получения данных. Но она закрытая и я не могу зайти в исходники и посмотреть как там реализован поиск записей в выбранном пользователем диапозоне дат по таблицам
25 сен 13, 13:56    [14882348]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
flexgen
Member

Откуда: Город на песке
Сообщений: 782
Ольга Семенова
таблицы формируются каждый день автоматически - в каждой порядка 100 000 записей. Есть утилита, которая работает с этими таблицами по описанному мной алгоритму для получения данных. Но она закрытая и я не могу зайти в исходники и посмотреть как там реализован поиск записей в выбранном пользователем диапозоне дат по таблицам


Ужос!!! Руки бы поотрывать за такое вместе с головой.

Попробуйте проверить наличие в базе view которое построено на основании этих таблиц. Если таковое имеется - вопрос решен. Если нет - вам придется такое view построить. С учетом того, как построена аппликация, Вам придется каждый день перестраивать view так что бы вновь созданные таблицы включались во view. Ну а дальше простой select из view с определением условий, которые Вам нужны.

Почитать про Create view
25 сен 13, 14:25    [14882579]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
StarikNavy
Member

Откуда: Москва
Сообщений: 2396
Ольга Семенова
Но она закрытая и я не могу зайти в исходники и посмотреть как там реализован поиск записей в выбранном пользователем диапозоне дат по таблицам


есть такой инструмент SQL Profiler, с его помощью можно смотреть запросы которые ваша утилита отправляет на сервер, и узнать вам необходимое
25 сен 13, 14:32    [14882650]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
Ольга Семенова
Member

Откуда:
Сообщений: 698
всем спасибо
26 сен 13, 15:51    [14888272]     Ответить | Цитировать Сообщить модератору
 Re: Удаление по циклу в таблицах БД  [new]
pio777
Member

Откуда:
Сообщений: 127
Ольга Семенова,

exec sp_msforeachtable @command1= 'print ''?''', @command2 = 'SELECT * FROM ? where Field_1=''Иванов''',
@whereand = ' and o.name like ''T[_]Table[_][0-9][0-9][0-9][0-9][_][0-9][0-9][_][0-9][0-9][_]00[_]00[_]00'''
27 сен 13, 11:40    [14891671]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить