Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Удаление данных из таблиц

9.8K
04 мая 2006 года
linker3
28 / / 29.11.2005
Всем доброго времени суток! Народ подскажите пожалуйста как сформировать SQL запрос на удаление данных из таблиц (данные удаляются в соответсвии с опредилённым условием), если число таблиц неизвестно (вернее их очень много - где-то порядка 200). Каждая таблица имеет общее для всех поле, за каким и идёт удаление. Возможно ли выполнение такого "динамического" запроса? Если да, то напишите его пожалуйста.
За ранее спасибо!
385
04 мая 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by linker3
Каждая таблица имеет общее для всех поле, за каким и идёт удаление. За ранее спасибо!


Не совсем понятно что значит "поле за каким и идет удаление"?
Еще вопрос. В таблицах из которых удаляются данные есть поля, которые являются FK для других таблиц? Если нет, то все просто.
Насколько мне известно оператор delete не позволяет удалять сразу из нескольких таблиц, поэтому пишешь запрос на удаление из одной таблицы, название таблицы передаешь в запрос параметром. Организуешь цикл по именам таблиц. Выпорлняешь запрос в цикле. Все.

8.4K
04 мая 2006 года
Dian
91 / / 18.02.2006
linker3
Я бы сказал, что пришло время задуматься о проектировании базы :)
Сделать это не проблема, но удаляться будет долго
9.8K
05 мая 2006 года
linker3
28 / / 29.11.2005
Цитата:
Originally posted by SomewherSomehow
Не совсем понятно что значит "поле за каким и идет удаление"?
Еще вопрос. В таблицах из которых удаляются данные есть поля, которые являются FK для других таблиц? Если нет, то все просто.
Насколько мне известно оператор delete не позволяет удалять сразу из нескольких таблиц, поэтому пишешь запрос на удаление из одной таблицы, название таблицы передаешь в запрос параметром. Организуешь цикл по именам таблиц. Выпорлняешь запрос в цикле. Все.


У меня каждая таблица имеет общее для всех поле (одинаково называется), но таблици не объединены. помоги пожалуйста сделать этот запрос, а именно как извлечь по одиночке названия таблиц, которые входят в БД? Названия таблиц не параметрические, тоесть не отличаються на один символ и т.п.

385
05 мая 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by linker3
У меня каждая таблица имеет общее для всех поле (одинаково называется), но таблици не объединены. помоги пожалуйста сделать этот запрос, а именно как извлечь по одиночке названия таблиц, которые входят в БД? Названия таблиц не параметрические, тоесть не отличаються на один символ и т.п.



Вот интересно, ты хочешь чтобы тебе помогли, но ничего не указываешь...ни субд, ни на чем клиента пишешь, ни как организуешь выполнение запросов. Как после этого говорить что-то конкретное, есть ведь мнного способов?
Например в BCB 6:

 
Код:
TStringList *TableNames = new TStringList();
  ADOConnection->GetTableNames(TableNames);


Например в VS .NET 2003:
 
Код:
DataTable schemaTable = oleDbConnection1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
                    new object[] {null, null, null, "TABLE"});


Например в хран.проц. MS SQL:
 
Код:
select * from sysobjects where xtype = 'U'


Конкретнее надо вопрос задавать.
9.8K
05 мая 2006 года
linker3
28 / / 29.11.2005
Цитата:
Originally posted by SomewherSomehow
Вот интересно, ты хочешь чтобы тебе помогли, но ничего не указываешь...ни субд, ни на чем клиента пишешь, ни как организуешь выполнение запросов. Как после этого говорить что-то конкретное, есть ведь мнного способов?
Например в BCB 6:
 
Код:
TStringList *TableNames = new TStringList();
  ADOConnection->GetTableNames(TableNames);


Например в VS .NET 2003:
 
Код:
DataTable schemaTable = oleDbConnection1.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,
                    new object[] {null, null, null, "TABLE"});


Например в хран.проц. MS SQL:
 
Код:
select * from sysobjects where xtype = 'U'


Конкретнее надо вопрос задавать.


Извиняюсь за неконкретность. Мне необходимо написать запрос на SQL.

 
Код:
select * from sysobjects where xtype = 'U'

Этот код выводит все записи из таблици sysobjects за условием что поле xtype = 'U'. А мне необходимо из всех таблиц одновременно (каким-то вложеным запросом видимо) удалить те поля, которые попадают под опредилённое условие. Название таблиц неизвестно (итзвестно, что их больше 200), а также что поле за которым удаляется запись - одинаковое для всех таблиц (одинаково называется)
385
05 мая 2006 года
SomewherSomehow
477 / / 25.07.2004
Цитата:
Originally posted by linker3
Извиняюсь за неконкретность. Мне необходимо написать запрос на SQL.
 
Код:
select * from sysobjects where xtype = 'U'

Этот код выводит все записи из таблици sysobjects за условием что поле xtype = 'U'. А мне необходимо из всех таблиц одновременно (каким-то вложеным запросом видимо) удалить те поля, которые попадают под опредилённое условие. Название таблиц неизвестно (итзвестно, что их больше 200), а также что поле за которым удаляется запись - одинаковое для всех таблиц (одинаково называется)



Нет этот код выводит названия всех таблиц в твоей БД.

385
05 мая 2006 года
SomewherSomehow
477 / / 25.07.2004
Если уж так нужен весь запрос - вот что я имел ввиду

Код:
declare @TableName nvarchar(250)
declare @Script nvarchar(250)

declare cur cursor local read_only forward_only static for
select
    [Name]
from
    sysobjects
where
    xtype = 'U'

open cur

fetch next from cur into @TableName
while @@fetch_status = 0 begin
    set @Script = 'delete from '+ @TableName
    exec sp_executesql @Script
    fetch next from cur into @TableName
end
close cur
deallocate cur
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог