Удалить данные из таблиц SQL - PullRequest
0 голосов
/ 18 января 2012

У меня есть 10 таблиц, скажем, Table_1, Table_2, Table_3, Table_4 ..., Table_10 ... Я должен удалить данные из всех таблиц, кроме Table_4. Есть ли какой-либо однострочный запрос для этого (с использованием 'LIKE', 'IN' и т. Д.)

Ответы [ 3 ]

1 голос
/ 18 января 2012

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

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

Редактировать: этот ответ только для MS SQL:)

0 голосов
/ 08 декабря 2016
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

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

0 голосов
/ 18 января 2012

написать запрос на удаление без таблицы_4

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