저장 프로 시저가 실행되면 일부 테이블을 비우고 싶지만 그 작업을 수행 할 수 없습니다. - 프로 시저에 대한 매개 변수를 선언하는 경우 그 괄호에만 사용해야합니다저장 프로 시저에서 다중 삭제 작업
1 : 내가 한 일은
create proc MakeEmpty ()
as
begin
delete from table1
delete from table2
delete from table3
end
저장 프로 시저가 실행되면 일부 테이블을 비우고 싶지만 그 작업을 수행 할 수 없습니다. - 프로 시저에 대한 매개 변수를 선언하는 경우 그 괄호에만 사용해야합니다저장 프로 시저에서 다중 삭제 작업
1 : 내가 한 일은
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에서 하나 이상의 insert/update/delete (truncate as delte)를 수행하지 마십시오. – HLGEM
두 가지입니다. 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
시도 (
및 )
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, 절차 4, MakeEmpty, 줄 4 ')'근처에 구문이 잘못되었습니다. –