SQL Server에 DROP IF EXISTS를 사용하는 방법은 무엇입니까?



문제를 제거하기 위해 도구를 사용해보십시오

이 기사에서는 '존재하는 경우 삭제' SQL Server 2016 이상 버전에서 사용할 수있는 문입니다. '종료 된 경우' SQL Server 2016 이상 버전의 기존 DROP 문에 추가 된 최신 선택적 절입니다. 기본적으로 '존재하는 경우 삭제' 옵션은 엔티티가 생성되거나 삭제되기 전에 데이터베이스에 남아 있는지 확인해야 할 때 사용됩니다. 이 경우 먼저 기존 데이터베이스 개체를 삭제 한 다음 필요한 경우 변경 사항을 적용하여 다시 만듭니다.



따라서 개체의 존재 여부를 테스트하는 문을 작성하는 if 조건과 if 조건 내부에 기존 방식으로 작성하는 것을 방지합니다. 발생하지 않으면 배치의 다음 문이 계속 실행됩니다. 하지만 존재하지 않는 객체를 드롭하려고하면 아래와 같은 오류 메시지가 발생합니다.



다음 쿼리를 실행하십시오.



드롭 테이블 dbo.company

출력은 다음과 같습니다.

존재하지 않는 데이터베이스 개체를 삭제하는 동안 오류가 발생합니다.

통사론

'DROP object_type [IF EXISTS] object_name'

인수

OBJECT_TYPE :



개체 유형은 데이터베이스, 트리거, 어셈블리, 시퀀스, 인덱스, 테이블, 프로 시저보기, 함수 등의 모든 사용자가 될 수 있습니다.

존재하는 경우 :

선택적인 절이며 DROP 문에 언급 된 경우 개체의 존재 여부를 확인하고 개체가있는 경우 삭제되고 그렇지 않으면 계속해서 블록에서 다음 오류를 생성하지 않고 다음 문을 실행합니다.

이제 SQL Server 2016의 새로운 방법 인 'DROP IF EXISTS'가 도입됨에 따라 개발자는 간단한 코드를 작성할 수 있습니다.

먼저 'appuals'라는 데이터베이스를 만듭니다.

데이터베이스 생성

이제 다음 코드를 실행하여 삭제할 테이블을 생성합니다.

use [appuals] Go CREATE TABLE temp (id INT, name varchar (100)); 가다

출력은 다음과 같습니다.

테이블 생성

또한 다음 코드를 사용하여 삭제할 저장 프로 시저를 만듭니다.

[appuals] 사용 GO SET ANSI_NULLS ON GO SET QUOTED_IDENTIFIER ON GO Create PROCEDURE [dbo]. [sp_temp] AS BEGIN SET NOCOUNT ON; dbo.temp에서 * SELECT; 종료

출력은 다음과 같습니다.

스토어 프로 시저 생성

이전 방법 : SQL Server 이전에 데이터베이스 개체에서 종료되는 경우 드롭 사용

SQL Server 2016 이전에 DROP IF EXISTS 메서드를 사용하려면 긴 IF 문 래퍼 코드를 작성해야했습니다.

존재하는 경우 테이블 삭제

테이블을 삭제하는 이전 방법은 다음과 같습니다.

SQL Server 2015 또는 이전 버전을 사용하는 경우 다음 코드 묶음을 실행해야합니다.

If (OBJECT_ID ( 'dbo.temp') Is Not Null) Drop Table temp

출력은 다음과 같습니다.

테이블 삭제

이제 구문이 매우 혼란 스럽기 때문에 마음에 들지 않고 SQL Server 2016 이상을 사용하는 경우 큰 래퍼 대신 간단한 DROP IF EXIST 문을 사용할 수 있습니다.

저장 프로 시저가있는 경우 삭제 :

프로 시저를 삭제하려면 저장 프로 시저가 있는지 여부를 확인하는 조건문을 작성한 다음 drop 문을 작성해야합니다. 그렇지 않으면 저장 프로 시저가없는 경우 오류가 발생합니다.

이제 다음 문을 실행하여 SQL Server 2016보다 낮은 버전에서 프로 시저를 삭제합니다.

IF EXISTS (SELECT 1 FROM sys.procedures WHERE Name = 'sp_temp') DROP PROCEDURE dbo.sp_temp

출력은 다음과 같습니다.

if 래퍼 코드의 이전 방법을 사용하여 프로 시저 삭제

존재하는 경우 데이터베이스 삭제 :

이전 버전의 SQL Server를 사용하는 경우 다음 코드를 실행하여 데이터베이스를 삭제해야합니다.

DB_ID ( 'appuals')가 NULL이 아닌 경우 BEGIN DROP DATABASE appuals END

출력은 다음과 같습니다.

이전 방법을 사용하여 데이터베이스 삭제

새로운 방법 : SQL Server 2016 이상 버전에서 지원되는 경우 DROP IF EXISTS

SQL Server 2016 이상에서 데이터베이스 개체를 삭제하려면 간단한 문을 실행해야합니다.

테이블이있는 경우 삭제 :

저장된 테이블이있는 경우이를 제거하기 위해 SQL Server 2016에서 아래와 같은 문을 작성할 수 있습니다.

dbo.temp가있는 경우 테이블 삭제

출력은 다음과 같습니다.

새로운 방법을 사용하여 테이블 삭제

존재하는 경우 삭제 절차 :

이제 다음 코드를 실행하여 기사의 시작 부분에서 만든 저장 프로 시저를 삭제합니다.

있는 경우 삭제 절차 dbo.sp_temp

출력은 다음과 같습니다.

새로운 방법을 사용하여 테이블 삭제

구문에 관한 한,이 간단한 문장은 이해하기 쉽고 기억하기 쉽습니다. 마찬가지로 동일한 절차에 따라 다른 데이터베이스 개체를 삭제할 수 있습니다.

존재하는 경우 데이터베이스 삭제 :

존재하는 경우 체크를 사용하여 데이터베이스를 삭제하려면 다음 코드를 실행하십시오.

존재하는 경우 MASTER GO DROP 데이터베이스 사용 appuals

출력은 다음과 같습니다.

새 방법을 사용하여 데이터베이스 삭제

이 방법을 사용하면 얻을 수있는 이점은 데이터베이스가 존재하지 않으면 오류가 발생하지 않고 배치의 다음 문이 계속 실행된다는 것입니다. 이미 삭제 된 데이터베이스를 다시 삭제 해 보겠습니다.

이미 삭제 된 데이터베이스를 다시 삭제하는 동안 오류가 발생합니다.

마찬가지로 데이터베이스에서 인덱스, 뷰, 시퀀스, 어셈블리 등을 삭제할 수 있습니다.

3 분 읽기