2011-12-12 8 views
-1

저장 프로 시저가 실행되면 일부 테이블을 비우고 싶지만 그 작업을 수행 할 수 없습니다. - 프로 시저에 대한 매개 변수를 선언하는 경우 그 괄호에만 사용해야합니다저장 프로 시저에서 다중 삭제 작업

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, 절차 4, 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 블록과 트랜잭션에 있어야하므로 명령문 중 하나가 실패하면 모든 것이 롤백됩니다. 트랜잭션 처리없이 proc에서 하나 이상의 insert/update/delete (truncate as delte)를 수행하지 마십시오. – HLGEM

4

두 가지입니다. param이 없다면 불필요합니다. 그것은 최소한으로 기록 기본적으로 대신 행별로 행을 삭제하려면의 메타 작업입니다 - 당신은 테이블을 비우고 싶은 경우에, 당신은 TRUNCATE을 사용해야합니다 -

2.

당신은 작동하지 않는 것에 대해 명확히해야하지만이 같은 트릭 수행해야합니다 대신

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 

하지만 확실 table2table3table1table3table2 저장 프로 시저 것을 실행하면 어떻게됩니까

관련 문제