2011-12-12 11 views
-1

ストアドプロシージャが実行されてもテーブルを空にしたいが、それはできない。 - あなたはプロシージャのパラメータを宣言している場合、これらの括弧にのみ使用されるべきストアドプロシージャ内での複数の削除操作

:私がやったことは

create proc MakeEmpty () 
as 
begin 
    delete from table1 
    delete from table2 
delete from table3 
end 
+1

を参照していませんか? SQLは正常に見えます。 – jmacinnes

+1

なぜこれは動作しませんでしたか? – gbn

+0

メッセージ102、レベル15、状態1、プロシージャMakeEmpty、行4 ')'の近くの構文が正しくありません。 –

答えて

4

使用truncateをし、このよう()を削除:

create proc MakeEmpty 
as 
begin 
    truncate table table1 
    truncate table table2 
    truncate table table3 
end 
+1

+1 - テーブルに外部キー制約が定義されている場合、truncateは使用できないことに注意してください。 –

+0

@IanNelson確かに –

+1

もちろん、この全部をtry catchブロックとトランザクションに入れる必要があるので、ステートメントの1つが失敗した場合はすべてがロールバックされます。トランザクション処理なしで、proc内で複数の挿入/更新/削除(truncate as delt)を実行しないでください。 – HLGEM

4

2つのことです。 paramがなければ不要になります。

- あなたがテーブルを空にしたい場合は、TRUNCATEを使用する必要があります - それは、最小ログと基本的には代わりに行ごと削除のメタ操作でいます。

あなたが働いていないかについて明確にする必要がありますが、このような何かが、トリックを行う必要があります。代わりに

BEGIN 

IF EXISTS (SELECT 1 from DatabaseName.sys.Tables WHERE Name = 'Table1') 
TRUNCATE TABLE Databasename.dbo.Table1 

...repeat for other tables... 

END 
3

削除するようにしてください(および)

create proc MakeEmpty 
as 
begin 
    delete from table1; 
    delete from table2; 
    delete from table3; 
end 

しかし確かtable2table3table1table3を参照しない作りでは、そのストアドプロシージャを実行するとどうなりtable2

関連する問題