테이블이 존재하는지 확인하고 존재하지 않는 경우 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.tables
sys.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
'itsource' 카테고리의 다른 글
Objective-C의 typedef 열거란 무엇입니까? (0) | 2023.04.22 |
---|---|
신호로 인해 명령이 실패했습니다.세그멘테이션 장애: 11 (0) | 2023.04.17 |
Windows에서 260자 경로 길이 제한이 있는 이유는 무엇입니까? (0) | 2023.04.17 |
T-SQL 선택에서 각 행에 대해 난수를 생성하려면 어떻게 해야 합니까? (0) | 2023.04.17 |
「 」의 맞추기 「 」의 맞추기 「 」의 맞추기 페이지 중앙(가로/가로)까지 (0) | 2023.04.17 |