Здравствуйте уважаемые участники форума. Мне нужно очистить таблицы базы, выбранные по условию типа: Если в имени таблицы есть вхождение "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
Подскажите пожалуйста как объединить написанное в двух запросах.
Очистка выбранных таблиц базы
Средствами SQL по-моему никак.
- Игорь Акопян
- Сообщения: 1440
- Зарегистрирован: 13 окт 2004, 17:11
- Откуда: СПБ
- Контактная информация:
на firebird есть 'execute block' на MSSQL не знаю

- Naeel Maqsudov
- Сообщения: 2570
- Зарегистрирован: 20 фев 2004, 19:17
- Откуда: Moscow, Russia
- Контактная информация:
Должно быть обязательно. Поищите в справке про динамический SQL.
В Oracle - EXECUTE IMMEDIATE "оператор";
В Oracle - EXECUTE IMMEDIATE "оператор";
-
- Сообщения: 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'.
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
[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
