복붙노트

[SQL] 테이블이 존재하는지 확인하고 존재하지 않는 경우, SQL 서버 2008을 만들

SQL

테이블이 존재하는지 확인하고 존재하지 않는 경우, SQL 서버 2008을 만들

나는 SQL Server 2008의 저장 프로 시저를 쓰고 있어요. 나는 테이블이 데이터베이스에 존재하는지 확인해야합니다. 그 다음 그렇지 않으면 나는 그것을 만들어야합니다.

이걸 어떻게해야합니까?

해결법

  1. ==============================

    1.이 같은

    이 같은

    IF  NOT EXISTS (SELECT * FROM sys.objects 
    WHERE object_id = OBJECT_ID(N'[dbo].[YourTable]') AND type in (N'U'))
    
    BEGIN
    CREATE TABLE [dbo].[YourTable](
        ....
        ....
        ....
    ) 
    
    END
    
  2. ==============================

    2.아래 그림처럼 콘트라스트, I는 object_id에 함수를 사용 등을들 수있다. 그것은 읽기 좀 더 쉽게, 그리고 당신이는 sys.objects 대 sysobjects의 대 sys.all_objects에 대해 걱정할 필요가 없습니다 대 sys.tables. 기본 형태 :

    아래 그림처럼 콘트라스트, I는 object_id에 함수를 사용 등을들 수있다. 그것은 읽기 좀 더 쉽게, 그리고 당신이는 sys.objects 대 sysobjects의 대 sys.all_objects에 대해 걱정할 필요가 없습니다 대 sys.tables. 기본 형태 :

    IF object_id('MyTable') is not null
        PRINT 'Present!'
    ELSE
        PRINT 'Not accounted for'
    

    그 이름을 가진 개체 존재가있는 경우 물론이 "현재"로 표시됩니다. 그냥 테이블을 확인하려면 필요할 것 :

    IF object_id('MyTable', 'U') is not null
        PRINT 'Present!'
    ELSE
        PRINT 'Not accounted for'
    

    그것은뿐만 아니라 임시 테이블을 위해 작동합니다 :

    IF object_id('tempdb.dbo.#MyTable') is not null
        PRINT 'Present!'
    ELSE
        PRINT 'Not accounted for'
    
  3. ==============================

    3.우리는 스크립트 아래하여 테이블에 샘플 데이터베이스를 만들어 보자 :

    우리는 스크립트 아래하여 테이블에 샘플 데이터베이스를 만들어 보자 :

    CREATE DATABASE Test
    GO
    USE Test
    GO
    CREATE TABLE dbo.tblTest (Id INT, Name NVARCHAR(50))
    

    접근 1 : INFORMATION_SCHEMA.TABLES 뷰를 사용하여

    tblTest 테이블이 현재 데이터베이스에 존재하는지 확인하기 위해 아래와 같이 우리는 쿼리를 작성할 수 있습니다.

    IF EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = N'tblTest')
    BEGIN
      PRINT 'Table Exists'
    END
    

    위의 쿼리를 확인 현재 데이터베이스의 모든 스키마에 걸쳐 tblTest 테이블의 존재. 대신이의 당신은 지정된 스키마에있는 테이블의 존재를 확인하고 지정된 데이터베이스가 다음 우리는 아래와 같이 위의 쿼리를 작성할 수 원하는 경우 :

    IF EXISTS (SELECT * FROM Test.INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA = N'dbo'  AND TABLE_NAME = N'tblTest')
    BEGIN
      PRINT 'Table Exists'
    END
    

    이 방법의 장점 : INFORMATION_SCHEMA 뷰는 어떤 변화를 필요로하지 않는다 그래서 다른 RDBMS에 포팅, 다른 RDBMS 시스템에서 휴대용입니다.

    방법 2 : OBJECT_ID 사용 () 함수

    tblTest 테이블이 현재 데이터베이스에 존재하는지 확인하기 위해 아래와 같이 우리는 OBJECT_ID () 함수를 사용할 수 있습니다.

    IF OBJECT_ID(N'dbo.tblTest', N'U') IS NOT NULL
    BEGIN
      PRINT 'Table Exists'
    END
    

    테이블 이름에 대한 데이터베이스 이름 및 스키마 이름 부분을 지정하는 것은 선택 사항입니다. 그러나 지정 데이터베이스 이름 및 스키마 이름 대신 스키마 모두에서 현재 데이터베이스에 체크, 지정된 데이터베이스와 지정된 스키마에서 테이블의 존재를 확인하는 옵션을 제공합니다. 현재 데이터베이스가 마스터 데이터베이스에도 불구하고, 우리는 테스트 데이터베이스의 DBO 스키마에 tblTest 테이블의 존재를 확인할 수 있습니다 쿼리 쇼 아래.

    USE MASTER
    GO
    IF OBJECT_ID(N'Test.dbo.tblTest', N'U') IS NOT NULL
    BEGIN
      PRINT 'Table Exists'
    END
    

    장점 : 쉽게 기억합니다. OBJECT_ID () 함수에 대한 언급에 또 하나 개 주목할만한 점이다 : 그것은 현재 연결 컨텍스트에서 생성 된 임시 테이블의 존재를 확인하는 옵션을 제공합니다. 모든 다른 대신 현재 연결 컨텍스트의 모든 연결 컨텍스트에 걸쳐 임시 테이블의 존재가 만든 검사를 접근. OBJECT_ID () 함수를 사용하여 임시 테이블의 존재를 확인하는 방법 쿼리 보여주는 아래 :

    CREATE TABLE #TempTable(ID INT)
    GO
    IF OBJECT_ID(N'TempDB.dbo.#TempTable', N'U') IS NOT NULL
    BEGIN
      PRINT 'Table Exists'
    END
    GO
    

    접근 방법 3 :는 sys.objects 카탈로그 뷰를 사용하여

    아래와 같이 우리는 테이블의 존재를 확인하기 위해 sys.objects 카탈로그 뷰를 사용할 수 있습니다 :

    IF EXISTS(SELECT 1 FROM sys.Objects WHERE  Object_id = OBJECT_ID(N'dbo.tblTest') AND Type = N'U')
    BEGIN
      PRINT 'Table Exists'
    END
    

    접근 방법 4 : sys.Tables 카탈로그 뷰를 사용하여

    아래와 같이 우리는 테이블의 존재를 확인하기 위해 Sys.Tables 카탈로그 뷰를 사용할 수 있습니다 :

    IF EXISTS(SELECT 1 FROM sys.Tables WHERE  Name = N'tblTest' AND Type = N'U')
    BEGIN
      PRINT 'Table Exists'
    END
    

    Sys.Tables 카탈로그 뷰 상속는 sys.objects 카탈로그 뷰의 행은 카탈로그는 sys.objects 뷰 sys.Tables로 볼 유래라고 기재보기로 지칭된다. 저장 프로 시저, 뷰 등 : Sys.Tables 그것은 같은 개체에 대한 행을 반환 Sys.Object 테이블 개체에 대한 행을 반환에서 떨어져 볼 반면 테이블 오브젝트에 대해서만 행을 반환합니다

    접근 방법 5 : 피 사용 sys.sysobjects 시스템 테이블

    우리는 직접, 그것은 직접 액세스는 SQL 서버의 일부 향후 버전에서 더 이상 사용되지 않습니다 sys.sysobjects 시스템 테이블을 사용하지 않아야합니다. 당 같이 마이크로 소프트 BOL는 [1] 링크 MS는 카탈로그 뷰는 sys.objects를 사용하는 제안되고 / 대신 직접 sys.sysobjects 시스템 테이블의 sys.tables.

    IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'tblTest' AND xtype = N'U')
    BEGIN
      PRINT 'Table Exists'
    END
    

    참조 : http://sqlhints.com/2014/04/13/how-to-check-if-a-table-exists-in-sql-server/

  4. ==============================

    4.EDITED

    EDITED

    당신은 존재 원하는 테이블을 확인하기 위해 sys.tables로 볼 수 있습니다 :

    IF  NOT EXISTS (SELECT * FROM sys.tables
    WHERE name = N'YourTable' AND type = 'U')
    
    BEGIN
    CREATE TABLE [SchemaName].[YourTable](
        ....
        ....
        ....
    ) 
    
    END
    
  5. ==============================

    5.

    IF (EXISTS (SELECT * 
                     FROM INFORMATION_SCHEMA.TABLES 
                     WHERE  TABLE_NAME = 'd020915'))
    BEGIN
      declare @result int
      set @result=1
      select @result as result
    END
    
  6. ==============================

    6.

    Declare @Username varchar(20)
    Set @Username = 'Mike'
    
    if not exists 
    (Select * from INFORMATION_SCHEMA.TABLES where TABLE_NAME = 'tblEmp')
    
    Begin
        Create table tblEmp (ID int primary key, Name varchar(50))
        Print (@Username + ' Table created successfully')
    End
    
    Else
    
    Begin
        Print (@Username + ' : this Table Already exists in the database')
    End
    
  7. ==============================

    7.데이터베이스에있는 테이블의 존재 여부를 확인하려면 다음 문을보십시오 :

    데이터베이스에있는 테이블의 존재 여부를 확인하려면 다음 문을보십시오 :

    If not exists (select name from sysobjects where name = 'tablename')
    

    당신은 경우 블록 내부의 테이블을 만들 수 있습니다.

  8. ==============================

    8.내가 잘못 아니에요 경우이 작업을해야합니다 :

    내가 잘못 아니에요 경우이 작업을해야합니다 :

        if not exists (Select 1 from tableName)
    create table ...
    
  9. from https://stackoverflow.com/questions/5952006/check-if-table-exists-and-if-it-doesnt-exist-create-it-in-sql-server-2008 by cc-by-sa and MIT license