Страница 1 из 1

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

Добавлено: 12 ноя 2008, 12:08
Viktor Zull
Здравствуйте уважаемые участники форума. Мне нужно очистить таблицы базы, выбранные по условию типа: Если в имени таблицы есть вхождение "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

Подскажите пожалуйста как объединить написанное в двух запросах.

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

Добавлено: 13 ноя 2008, 04:02
Yurich
Средствами SQL по-моему никак.

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

Добавлено: 13 ноя 2008, 15:02
Игорь Акопян
на firebird есть 'execute block' на MSSQL не знаю

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

Добавлено: 13 ноя 2008, 17:09
Naeel Maqsudov
Должно быть обязательно. Поищите в справке про динамический SQL.

В Oracle - EXECUTE IMMEDIATE "оператор";

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

Добавлено: 14 ноя 2008, 00:10
Viktor Zull
В справке нашел пример использования EXECUTE IMMEDIATE:

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

Не понимаю как это работает. Мне нужно обойти мою выборку имен таблиц и при вызове strcpy во втором параметре вместо mf_table указывать имя очередной таблицы. Если так, то во-первых: как обойти результат выборки [например в while], в во-вторых: при размещение данных строк после запроса на выборку имен таблиц при исполнении возникает ошибка: Incorrect syntax near 'strcpy'.

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

Добавлено: 14 ноя 2008, 10:07
Игорь Акопян
может процедурку слепить, сделать что-нить типа
[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