2012-01-18 2 views
0

У меня есть 10 таблиц, например Table_1, Table_2, Table_3, Table_4 ..., Table_10 .. Мне нужно удалить данные из всех таблиц, кроме таблицы_4. «Использовать« LIKE »,« IN »и т. Д.)« Удалить * из tablename, как Table_, где Таблица NOT IN («Таблица_4») ».Удалить данные из SQL-таблиц

+2

какой сервер sql вы используете? –

+0

Какая база данных? Я еще не думал об этом, но вы могли бы получить имена таблиц из схемы, а затем сделать ... что-то с ними. – cha0site

+0

Помогла ли мне моя ссылка? –

ответ

1

Если количество таблиц превышает 10, вы не хотите перечислять все таблицы в инструкции delete. Вы должны придерживаться каталога и использовать курсор:

declare @table nvarchar(max) 
delcare @cur cursor 

set @cur = cursor fast_forward for 
    select name 
    from sys.tables 
    where name like 'Table_%' 
    and name not like 'Table_4' 

open @cur 
fetch next from @cur into @table 

while(@@fetch_status = 0) 
begin 
    sp_executesql 'DELETE FROM ' + @table 

    fetch next from @cur into @table 

end 
close @cur 
deallocate @cur 

Edit: этот ответ для MS SQL только :)

+0

Это не ваша «** ошибка **», но кажется, что писать имена таблиц лучше ... Меньше писать, Больше читаемости, Работает с каждой БД. =) – gdoron

+0

А если есть 10000 столов? :-) – Matten

+1

Значит, у вас было бы намного больше проблем, чем удалить их данные ... ** lol ** – gdoron

-1

написать запрос на удаление с из Table_4

delete from Table_1,Table_2,Table_3,Table_5,......Table10 
+0

что делать, если у вас тысячи таблиц? будете ли вы продолжать писать его вручную? –

+0

здесь есть только десять таблиц, поэтому я предложил – Nighil

+0

, если я скажу, что у меня 1000 столов и сказать, что вы предлагаете? –

0
use [db_name] 

declare @sql nvarchar(max) 

select @SQL = 
(select '; 
DELETE FROM ' + quotename(TABLE_SCHEMA) + '.' + 
quotename(TABLE_NAME) from INFORMATION_SCHEMA.TABLES where TABLE_TYPE = 'BASE TABLE' 
and TABLE_NAME not in ('mytab1', 'mytab2') 

ORDER BY Table_Schema, TABLE_NAME 
FOR XML PATH(''), type).value ('.','nvarchar(max)') 

print @SQL -- verify 

Он создаст запрос для удаления и использует этот запрос, удалив требуемую таблицу u и пропустив u не требуется.

Смежные вопросы