2012-01-18 18 views
0

私は10テーブル、たとえばTable_1、Table_2、Table_3、Table_4 ...、Table_10 ..私はTable_4以外のすべてのテーブルからデータを削除する必要があります。 ( 'LIKE'、 'IN'などを使用して) "*テーブル名のようなテーブル名から削除*テーブルNOT IN( 'テーブル_4')" ..SQLテーブルからデータを削除する

+2

どのSQL Serverを使用しますか? –

+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 

編集:この答えは唯一:)

+0

あなたの "** fault **"ではないが、テーブル名を書く方が良いと思われる...書き方が少なく、読みやすさが向上し、すべてのDBで動作する。 =) – gdoron

+0

テーブルが10000枚あれば? :-) – Matten

+1

だから、あなたはもっと多くの問題を抱えてデータを削除するでしょう... ** lol ** – gdoron

-1

がTable_4

アウト
delete from Table_1,Table_2,Table_3,Table_5,......Table10 
+0

何千ものテーブルがあればどうしますか?あなたはそれを手作業で書くつもりですか? –

+0

ここには10個のテーブルしかないので、私は – 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 
で削除クエリを記述MS SQLのためであります

削除のクエリを作成し、このクエリを使用して必要なテーブルを削除し、不要なスキップを行います。

関連する問題