sql-server - oracle 데이터 존재 여부




SQL Server에 테이블이 있는지 확인하십시오. (15)

    IF OBJECT_ID (N'dbo.T', N'U') IS NOT NULL 
      BEGIN 
          print 'deleted table';
          drop table t 
      END
    else 
      begin 
          print 'table not found' 
      end

Create table t (id int identity(1,1) not null, name varchar(30) not null, lastname varchar(25) null)
insert into t( name, lastname) values('john','doe');
insert into t( name, lastname) values('rose',NULL);

Select * from t
1   john    doe
2   rose    NULL

-- clean
drop table t

SQL 문을 사용하여 SQL Server 2000/2005에 테이블이 있는지 확인하는 방법에 대한 궁극적 인 토론입니다.

당신이 구글 대답을하면, 당신은 매우 다른 답변을 얻을. 공식 / 역방향 및 순방향 호환 방법이 있습니까?

다음과 같은 두 가지 방법이 있습니다. 어느 것이 표준 / 최선의 방법인가?

첫번째 방법 :

IF EXISTS (SELECT 1 
           FROM INFORMATION_SCHEMA.TABLES 
           WHERE TABLE_TYPE='BASE TABLE' 
           AND TABLE_NAME='mytablename') 
   SELECT 1 AS res ELSE SELECT 0 AS res;

두 번째 방법 :

IF OBJECT_ID (N'mytablename', N'U') IS NOT NULL 
   SELECT 1 AS res ELSE SELECT 0 AS res;

MySQL 은 간단한 것을 제공한다.

SHOW TABLES LIKE '%tablename%'; 

성명서. 나는 비슷한 것을 찾고있다.


- - 테이블이 있는지 확인하는 프로 시저를 만듭니다.

DELIMITER $$

DROP PROCEDURE IF EXISTS `checkIfTableExists`;

CREATE PROCEDURE checkIfTableExists(
    IN databaseName CHAR(255),
    IN tableName CHAR(255),
    OUT boolExistsOrNot CHAR(40)
)

  BEGIN
      SELECT count(*) INTO boolExistsOrNot FROM information_schema.TABLES
      WHERE (TABLE_SCHEMA = databaseName)
      AND (TABLE_NAME = tableName);
  END $$

DELIMITER ;

- 사용법 : 테이블 마이그레이션이 있는지 확인하십시오.

 CALL checkIfTableExists('muDbName', 'migrations', @output);

기억하는 한 항상 OBJECT_ID 스타일을 사용합니다.

IF OBJECT_ID('*objectName*', 'U') IS NOT NULL 

나는 그것이 오래된 질문이라는 것을 알고 있지만 자주 호출 할 계획이라면이 가능성을 발견했다.

create procedure Table_Exists
@tbl varchar(50)
as
return (select count(*) from sysobjects where type = 'U' and name = @tbl)
go

다른 데이터베이스에서 작업해야하는 경우 :

DECLARE @Catalog VARCHAR(255)
SET @Catalog = 'MyDatabase'

DECLARE @Schema VARCHAR(255)
SET @Schema = 'dbo'

DECLARE @Table VARCHAR(255)
SET @Table = 'MyTable'

IF (EXISTS (SELECT * FROM INFORMATION_SCHEMA.TABLES   
    WHERE TABLE_CATALOG = @Catalog 
      AND TABLE_SCHEMA = @Schema 
      AND TABLE_NAME = @Table))
BEGIN
   --do stuff
END

다른 데이터베이스에서 테이블 찾기 :

if exists (select * from MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

아래의 접근 방식을 참조하십시오,

접근법 1 : INFORMATION_SCHEMA.TABLES 뷰 사용

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

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

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

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

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

방법 3 : sys.Objects 카탈로그 뷰 사용

Sys.Objects 카탈로그 뷰를 사용하여 아래와 같이 테이블의 존재를 확인할 수 있습니다.

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.Tables 카탈로그 뷰 사용

다음과 같이 Sys.Tables 카탈로그 뷰를 사용하여 테이블의 존재 여부를 확인할 수 있습니다.

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

방법 5 : sys.sysobjects 시스템 테이블 사용 안 함

우리는 sys.sysobjects System Table을 직접 사용하지 않아야합니다. Sql Server의 일부 차후 버전에서는이 테이블에 직접 액세스 할 수 없습니다. Microsoft BOL 링크에 따라 Microsoft는 sys.sysobjects 시스템 테이블 대신 sys.objects / sys.tables 카탈로그 뷰를 직접 사용할 것을 제안합니다.

  IF EXISTS(SELECT name FROM sys.sysobjects WHERE Name = N'Customers' 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/


이것이 '궁극적 인'토론 인 경우 Larry Leonard의 스크립트는 서버가 연결되어 있으면 원격 서버에도 쿼리 할 수 ​​있다는 점에 유의해야합니다.

if exists (select * from REMOTE_SERVER.MyOtherDatabase.sys.tables where name = 'MyTable')
    print 'Exists'

정보 스키마를 사용하는 것은 SQL 표준 방법이므로이를 지원하는 모든 데이터베이스에서 사용해야합니다.


한 데이터베이스에서 테이블 t1을 고려하십시오. 당신은 다른 데이터베이스에서 스크립트를 실행하고 싶습니다. - t1이 존재하면, 아무것도하지 않고 t1을 만듭니다. 이 비주얼 스튜디오를 열려면 다음을 수행하십시오.

t1을 마우스 오른쪽 단추로 클릭 한 다음, 표를 스크립트로 작성한 다음 DROP 및 작성 대상을 선택한 후 새 조회 편집기

원하는 검색어를 찾을 수 있습니다. 그러나 스크립트를 실행하기 전에 쿼리에 drop 문을 주석 처리하는 것을 잊지 마십시오. 이미있는 경우 새 문을 작성하지 않으려합니다.

감사


SQL Server 2000 에서는 다음을 시도 할 수 있습니다.

IF EXISTS(SELECT 1 FROM sysobjects WHERE type = 'U' and name = 'MYTABLENAME')
BEGIN
   SELECT 1 AS 'res' 
END

SQL 서버! = MYSQL . 아직 해결책을 찾지 못한 사람을 알아야 할 중요한 것. 당신이 MYSQL 로 그것을하고 싶다면, 그것은 아주 간단합니다.

    $sql = "SELECT 1 FROM `db_name`.`table_name` LIMIT 1;";
    $result = mysql_query($sql);
    if( $result == false )
        echo "table DOES NOT EXIST";
    else
        echo "table exists";

Google에서 가장 인기있는 광고이기 때문에 여기에 게시하십시오.


IF EXISTS 
(
    SELECT  * 

    FROM    INFORMATION_SCHEMA.TABLES 

    WHERE   TABLE_SCHEMA = 'PutSchemaHere'     
            AND  
            TABLE_NAME   = 'PutTableNameHere'
)

IF EXISTS (   SELECT * FROM   dbo.sysobjects WHERE  id = OBJECT_ID(N'dbo.TableName') AND OBJECTPROPERTY(id, N'IsUserTable') = 1 )
BEGIN
  SELECT * FROM dbo.TableName;
END
GO

select name from SysObjects where xType='U' and name like '%xxx%' order by name




sql-server-2000