ストアドプロシージャが実行されてもテーブルを空にしたいが、それはできない。 - あなたはプロシージャのパラメータを宣言している場合、これらの括弧にのみ使用されるべきストアドプロシージャ内での複数の削除操作
:私がやったことは
create proc MakeEmpty ()
as
begin
delete from table1
delete from table2
delete from table3
end
ストアドプロシージャが実行されてもテーブルを空にしたいが、それはできない。 - あなたはプロシージャのパラメータを宣言している場合、これらの括弧にのみ使用されるべきストアドプロシージャ内での複数の削除操作
:私がやったことは
create proc MakeEmpty ()
as
begin
delete from table1
delete from table2
delete from table3
end
使用truncate
をし、このよう()
を削除:
create proc MakeEmpty
as
begin
truncate table table1
truncate table table2
truncate table table3
end
+1 - テーブルに外部キー制約が定義されている場合、truncateは使用できないことに注意してください。 –
@IanNelson確かに –
もちろん、この全部をtry catchブロックとトランザクションに入れる必要があるので、ステートメントの1つが失敗した場合はすべてがロールバックされます。トランザクション処理なしで、proc内で複数の挿入/更新/削除(truncate as delt)を実行しないでください。 – HLGEM
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
削除するようにしてください(
および)
create proc MakeEmpty
as
begin
delete from table1;
delete from table2;
delete from table3;
end
しかし確かtable2
とtable3
がtable1
とtable3
を参照しない作りでは、そのストアドプロシージャを実行するとどうなりtable2
を参照していませんか? SQLは正常に見えます。 – jmacinnes
なぜこれは動作しませんでしたか? – gbn
メッセージ102、レベル15、状態1、プロシージャMakeEmpty、行4 ')'の近くの構文が正しくありません。 –