2011-12-12 67 views
-1

如果存儲過程運行但我不能這樣做,我想使某些表爲空。我所做的是存儲過程中的多重刪除操作

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

當您運行該存儲過程時會發生什麼? SQL看起來很好。 – jmacinnes

+1

爲什麼這個工作沒有呢? – gbn

+0

Msg 102,Level 15,State 1,Procedure MakeEmpty,Line 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塊和一個事務中,所以如果其中一個語句失敗,所有的東西都會回滾。切勿在沒有事務處理的情況下在proc中執行多次插入/更新/刪除(截斷計數爲delte)。 – HLGEM

4

兩件事情:

- 如果你正在申報的程序參數這些括號,才應使用。如果沒有參數他們是不需要的。

- 如果你想清空表,那麼你應該使用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 

但請確保table2table3未引用table1table3未引用table2