[SQL] 테이블이 존재하는지 확인하고 존재하지 않는 경우, SQL 서버 2008을 만들
SQL테이블이 존재하는지 확인하고 존재하지 않는 경우, SQL 서버 2008을 만들
나는 SQL Server 2008의 저장 프로 시저를 쓰고 있어요. 나는 테이블이 데이터베이스에 존재하는지 확인해야합니다. 그 다음 그렇지 않으면 나는 그것을 만들어야합니다.
이걸 어떻게해야합니까?
해결법
-
==============================
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.아래 그림처럼 콘트라스트, 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.우리는 스크립트 아래하여 테이블에 샘플 데이터베이스를 만들어 보자 :
우리는 스크립트 아래하여 테이블에 샘플 데이터베이스를 만들어 보자 :
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.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.
IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME = 'd020915')) BEGIN declare @result int set @result=1 select @result as result END
-
==============================
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.데이터베이스에있는 테이블의 존재 여부를 확인하려면 다음 문을보십시오 :
데이터베이스에있는 테이블의 존재 여부를 확인하려면 다음 문을보십시오 :
If not exists (select name from sysobjects where name = 'tablename')
당신은 경우 블록 내부의 테이블을 만들 수 있습니다.
-
==============================
8.내가 잘못 아니에요 경우이 작업을해야합니다 :
내가 잘못 아니에요 경우이 작업을해야합니다 :
if not exists (Select 1 from tableName) create table ...
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
'SQL' 카테고리의 다른 글
[SQL] 그랜트는 데이터베이스의 모든 저장 프로 시저에 대한 사용자의 권한을 실행? (0) | 2020.07.21 |
---|---|
[SQL] 한 서버에서 다른 서버로 데이터 삽입? (0) | 2020.07.21 |
[SQL] 행은 테라 데이타에서 무엇을 사용 위의 제한은 없습니다? (0) | 2020.07.21 |
[SQL] 테이블 변경 쿼리에 대한 MySQL의 매우 느린 (0) | 2020.07.21 |
[SQL] 어떻게 테이블의 각 외래 키 ID의 인스턴스의 수를 계산하려면? (0) | 2020.07.21 |