많은 시간이 우리에 걸쳐 올 시나리오를 우리가 어디를 실행하는 데 필요에 따라 일부 코드는지 여부를 테이블이 있거나지 않습니다. 의 다른 방법이 있을 식별하는 테이블의 존재에서 Sql Server,이 문서의 목록은 다른 접근 방식은 일반적으로 사용되고 그것의 장단점이 있습니다. 나는 기억하기 쉽기 때문에 OBJECT_ID()함수를 사용하는 것을 선호한다. 어떤 접근 방식을 사용하고 동일한 이유를 알려주십시오.
하는 데모는 이러한 다른 방법을 만들 수 있는 예제 데이터베이스 테이블에 의해 아래 스크립트:
CREATE DATABASE SqlHintsDemoDBGOUSE SqlHintsDemoDBGOCREATE TABLE dbo.Customers (CustId INT, Name NVARCHAR(50))
는 방법을 확인하면 임시 테이블에 존재하는 Sql Server?
접근법 1:INFORMATION_SCHEMA 사용.테이블 보기
작성할 수 있습니다 다음과 같은 쿼리를 확인하려면 아래하는 경우 고객 테이블에 존재하는 현재 데이터베이스입니다.나는 이것이 내가 할 수있는 유일한 방법이라고 생각한다.:
위의 질을 확인 존재하는 고객 테이블에서는 모든 스키마에서 현재 데이터베이스입니다. 대신 이를 확인하려면의 존재 테이블에 지정한 스키마와 지정된 데이터베이스가 이제 다음과 같이 쓸 수 있습니다 위의 질 아래와 같이
IF EXISTS (SELECT * FROM SqlHintsDemoDB.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo' AND TABLE_NAME = N'Customers')BEGIN PRINT 'Table Exists'END
결과:
이 접근법의 장점: INFORMATION_SCHEMA 뷰는 다른 RDBMS 시스템에서 이식 가능하므로 다른 RDBMS 로 포팅하면 변경이 필요하지 않습니다.
는 방법을 확인하는 경우에 저장된 절차에 존재하는 Sql Server
접근 2:를 사용하여 OBJECT_ID()함수
우리가 사용할 수 있습니다 OBJECT_ID()함수는 아래와 같은 확인 하는 경우 고객 테이블에 존재하는 현재 데이터베이스입니다.나는 이것이 어떻게 작동하는지 잘 모르겠습니다.:
데이터베이스를 지정하고한 스키마 이름 부분에 대한 테이블의 이름은 선택사항입니다. 그러나 지정하는 데이터베이스 이름과 스키마 이 옵션을 제공합의 존재를 확인한 테이블에 지정된 데이터베이스에서 지정한 스키마에,대신 검사의 현재 데이터베이스에 있는 모든 스키마. 아래 쿼리는 현재 데이터베이스가 마스터 데이터베이스이더라도 SqlHintsDemoDB 데이터베이스의 dbo 스키마에서 고객 테이블의 존재를 확인할 수 있음을 보여줍니다.
USE MASTERGOIF OBJECT_ID(N'SqlHintsDemoDB.dbo.Customers', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'END
결과:
Pros:기억하기 쉽습니다. 다른 하나 주목할만한 시점에 대해 언급 OBJECT_ID()함수이다:그것은 옵션을 제공합의 존재를 확인한 임시 테이블이 생성되는 현재 연결다. 다른 모든 방법을 확인 존재의 임시 테이블을 만들어진 모든 연결은 컨텍스트의 현재 연결다. 아래의 쿼리하는 방법을 보여줍의 존재를 확인한 임시 테이블을 사용하여 OBJECT_ID()함수:
CREATE TABLE #TempTable(ID INT)GOIF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULLBEGIN PRINT 'Table Exists'ENDGO
결과:
는 방법을 확인하는 경우에 데이터베이스에 존재하는 Sql Server
접근 3:를 사용하여 sys.객체 카탈로그보기
우리는 Sys 를 사용할 수 있습니다.체 카탈로그 보면의 존재를 확인한 테이블 다음과 같습니다:
IF EXISTS(SELECT 1 FROM sys.Objects WHERE Object_id = OBJECT_ID(N'dbo.Customers') AND Type = N'U')BEGIN PRINT 'Table Exists'END
결과
테이블에 레코드가 있는지 확인하는 방법
접근법 4:sys 사용.테이블 카탈로그보기
우리는 Sys 를 사용할 수 있습니다.테이블 카탈로그 보면의 존재를 확인한 테이블 다음과 같습니다:
IF EXISTS(SELECT 1 FROM sys.Tables WHERE Name = N'Customers' AND Type = N'U')BEGIN PRINT 'Table Exists'END
결과
Sys.테이블 카탈로그 뷰는 Sys 의 행을 상속합니다.객체 카탈로그보기,Sys.객체 카탈로그보기는 기본보기라고 여기서 sys 로.테이블을 파생 뷰라고 합니다. 시스.테이블은 테이블 객체에 대해서만 행을 반환하는 반면 Sys 는 반환됩니다.객체 뷰 테이블 객체에 대한 행을 반환하는 것 외에도 저장 프로 시저,뷰 등과 같은 객체에 대한 행을 반환합니다.
Sql Server 에 뷰가 있는지 확인하는 방법
접근법 5:sys 사용을 피하십시오.sysobjects System table
sys 사용을 피해야합니다.sysobjects 시스템 테이블 직접,그것에 직접 액세스는 sql 서버의 일부 향후 버전에서 더 이상 사용되지 않습니다. Microsoft BOL 링크에 따라 Microsoft 는 카탈로그 뷰 sys 를 사용할 것을 제안합니다.객체/sys.sys 대신 테이블.시스템 테이블을 직접 sysobjects.
IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' AND xtype = N'U')BEGIN PRINT 'Table Exists'END
결과:
는 방법을 확인하는 경우에 데이터베이스가 있
어떻게 확인하려면 저장된 절차에 존재하는 Sql Server
어떻게 확인하려면 보기를 존재
는 방법을 확인하면 임시 테이블이 있
어떻게 확인하려면 기록에 존재하는 표