如果存儲過程運行但我不能這樣做,我想使某些表爲空。我所做的是存儲過程中的多重刪除操作
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塊和一個事務中,所以如果其中一個語句失敗,所有的東西都會回滾。切勿在沒有事務處理的情況下在proc中執行多次插入/更新/刪除(截斷計數爲delte)。 – HLGEM
兩件事情:
- 如果你正在申報的程序參數這些括號,才應使用。如果沒有參數他們是不需要的。
- 如果你想清空表,那麼你應該使用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
Msg 102,Level 15,State 1,Procedure MakeEmpty,Line 4 ')'附近語法不正確。 –