itsource

테이블이 존재하는지 확인하고 존재하지 않는 경우 SQL Server 2008에서 생성합니다.

mycopycode 2023. 4. 17. 21:49
반응형

테이블이 존재하는지 확인하고 존재하지 않는 경우 SQL Server 2008에서 생성합니다.

SQL Server 2008에 저장 프로시저를 쓰고 있습니다.데이터베이스에 테이블이 있는지 확인해야 합니다.그렇지 않은 경우 생성해야 합니다.

이거 어떻게 해?

뭐 이런 거

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

참고로 다음과 같은 object_id 함수를 사용하는 것이 좋습니다.읽기 쉽고 sys.objects vs. sys.all_objects vs. sys.tables에 대해 걱정할 필요가 없습니다.기본 양식:

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

물론 이 이름을 가진 개체가 있으면 "Present"로 표시됩니다.테이블만 체크하려면 다음 사항이 필요합니다.

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'

다음 스크립트를 사용하여 테이블을 사용하여 샘플 데이터베이스를 작성합니다.

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

접근법 1: INFORMATION_SCHEMA를 사용합니다.테이블 뷰

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

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 뷰는 다양한 RDB를 통해 이식할 수 있습니다.MS 시스템이기 때문에 다른 RDBMS로의 포팅에는 변경이 필요 없습니다.

접근법 2: OBJECT_ID() 함수 사용

사용할 수 있습니다.OBJECT_ID()tblTest Table이 현재 데이터베이스에 존재하는지 확인하기 위해 다음과 같은 기능을 수행합니다.

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

테이블 이름에 대한 데이터베이스 이름 및 스키마 이름 부분을 지정하는 것은 옵션입니다.그러나 Database Name 및 Schema Name을 지정하면 모든 스키마에 걸쳐 현재 데이터베이스를 체크하는 대신 지정된 데이터베이스 및 스키마 내에 테이블이 있는지 확인할 수 있습니다.다음 쿼리는 현재 데이터베이스가 MASTER 데이터베이스인 경우에도 이 데이터베이스의 존재를 확인할 수 있음을 나타냅니다.tblTest의 테이블dbo의 스키마Test데이터베이스입니다.

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카탈로그 보기를 사용하여 다음과 같이 테이블의 존재를 확인합니다.

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카탈로그 보기를 사용하여 다음과 같이 테이블의 존재를 확인합니다.

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만 행을 하는 반면, 에서는 Table 객체에 행이 반환됩니다.Sys.Object뷰는 테이블 객체에 대한 행을 반환하는 것 외에 저장 프로시저, 뷰 등과 같은 객체에 대한 행을 반환합니다.

접근법 5: sys.sysobjects System 테이블 사용을 피합니다.

이제 .sys.sysobjects시스템 테이블에 직접 액세스하거나 직접 액세스할 수 있는 기능은 일부 이후 버전의 SQL Server에서 더 이상 사용되지 않습니다.[ BOL링크에 뷰 [Microsoft BOL][1]의 .sys.objects/sys.tablessys.sysobjects시스템 테이블을 직접 표시합니다.

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/

편집필

sys.tables를 조사하여 원하는 테이블을 확인할 수 있습니다.

IF  NOT EXISTS (SELECT * FROM sys.tables
WHERE name = N'YourTable' AND type = 'U')

BEGIN
CREATE TABLE [SchemaName].[YourTable](
    ....
    ....
    ....
) 

END
IF (EXISTS (SELECT * 
                 FROM INFORMATION_SCHEMA.TABLES 
                 WHERE  TABLE_NAME = 'd020915'))
BEGIN
  declare @result int
  set @result=1
  select @result as result
END
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

다음 문을 사용하여 데이터베이스에 테이블이 있는지 확인합니다.

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

if 블록 내부에 테이블을 작성할 수 있습니다.

틀리지 않으면 이 방법이 효과가 있습니다.

    if not exists (Select 1 from tableName)
create table ...

언급URL : https://stackoverflow.com/questions/5952006/check-if-table-exists-and-if-it-doesnt-exist-create-it-in-sql-server-2008

반응형