Очистка выбранных таблиц базы

SQL во всех проявлениях - от ANSI-92 до TSQL.

Модераторы: Yurich, Absurd

Ответить
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

Здравствуйте уважаемые участники форума. Мне нужно очистить таблицы базы, выбранные по условию типа: Если в имени таблицы есть вхождение "TempTable", то нужно удалить строки этой таблицы (очистить полностью).

Для выбора таблицы я использую запрос:

USE <Имя базы данных>
SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME LIKE '%TempTable%'
ORDER BY 1

Теперь для каждой таблицы мне нужно выполнить запрос:

DELETE FROM <Имя таблицы>

Используется Microsoft SQL Server 2005

Подскажите пожалуйста как объединить написанное в двух запросах.
Yurich
Сообщения: 107
Зарегистрирован: 23 фев 2004, 19:07

Средствами SQL по-моему никак.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

на firebird есть 'execute block' на MSSQL не знаю
Изображение
Аватара пользователя
Naeel Maqsudov
Сообщения: 2570
Зарегистрирован: 20 фев 2004, 19:17
Откуда: Moscow, Russia
Контактная информация:

Должно быть обязательно. Поищите в справке про динамический SQL.

В Oracle - EXECUTE IMMEDIATE "оператор";
Viktor Zull
Сообщения: 117
Зарегистрирован: 10 ноя 2005, 02:00

В справке нашел пример использования EXECUTE IMMEDIATE:

strcpy(aa, "DELETE FROM mf_table");
EXEC SQL EXECUTE IMMEDIATE :aa;

Не понимаю как это работает. Мне нужно обойти мою выборку имен таблиц и при вызове strcpy во втором параметре вместо mf_table указывать имя очередной таблицы. Если так, то во-первых: как обойти результат выборки [например в while], в во-вторых: при размещение данных строк после запроса на выборку имен таблиц при исполнении возникает ошибка: Incorrect syntax near 'strcpy'.
Аватара пользователя
Игорь Акопян
Сообщения: 1440
Зарегистрирован: 13 окт 2004, 17:11
Откуда: СПБ
Контактная информация:

может процедурку слепить, сделать что-нить типа
[syntax='SQL']for SELECT TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE = 'BASE TABLE'
AND TABLE_NAME LIKE '%TempTable%'
ORDER BY 1
into :TabName
do
begin
strcpy(aa, "DELETE FROM " || :TabName);
EXEC SQL EXECUTE IMMEDIATE :aa;
end
[/syntax]

хм.. если конечно там есть чтонить типа for select
Изображение
Ответить