2017-03-02 2 views
0

내가 MySQL의에서 변환하고이 코드를 가지고 : 나는 두 번을 실행하려고하면SQL 서버 : 테이블이 존재하는 경우, 그렇지 않으면 생성, 확인이

IF NOT EXISTS (SELECT * 
       FROM INFORMATION_SCHEMA.TABLES 
       WHERE TABLE_SCHEMA = 'TheSchema' 
       AND TABLE_NAME = 'odds_soccer') 
    CREATE TABLE "odds_soccer" (...) 

유일한 문제는 ..., 그것은과 두 번째 그루터기됩니다 오류

메시지 2714, 수준 16, 상태 6, 라인 데이터베이스에 'odds_soccer'라는 개체가 이미 있습니다 1
.

실제로 내 솔루션을 찾았으므로 코드가 작동하지 않는 이유는 확실하지 않습니다.

현재 데이터베이스를 선택한 Microsoft SQL Server Management Studio에서 쿼리로 실행하고 있습니다. 기존의 테이블이 작동합니다으로

IF Object_id('TEMPDB.schema_name.table', 'U') IS NOT NULL 
    DROP TABLE table; 
+0

- 이것을 사용 -이 일을 나타납니다 :

대신이 스크립트를 사용해보십시오 (NOT ((SELECT있는 경우 * INFORMATION_SCHEMA.TABLES FROM WHERE TABLE_NAME = 'odds_soccer '))) 이 코드는 실제로 기본 DB에 대한 특별한 지식없이 소프트웨어에 의해 생성 된 코드이므로 (odds_soccer는 예제 일 뿐이며 데이터, 열 등이 될 수 있음) ---- 이것이 가장 호환되는 코드가 아니겠습니까? 생성/사용 하시겠습니까? – Tom

답변

7

그러나 그것은 SQL-Server 버전에 따라 다릅니다 수 있습니다.

DECLARE @SchemaID int = (SELECT schema_id FROM sys.schemas WHERE name = 'X') 

IF NOT EXISTS (SELECT * FROM sys.tables WHERE name = 'Y' AND schema_id = @SchemaID) 
BEGIN 
    CREATE TABLE... 
END 
GO 

을하지만 기본적으로 동일합니다

현재 나는이 같은 스크립트를 사용하고 있습니다. 어떤 스키마 이름이 CREATE 문에 지정되지 않기 때문에 테이블이 기본 스키마, 일반적으로 dbo에서 생성되는 반면

+0

현재 코드와 같은 문제입니다. (참고 : 먼저 테이블을 삭제하고 싶지는 않습니다.) – Tom

+0

@tom 그렇다면 무엇을 기대할 수 있습니까? – Chanukya

+0

테이블이 작성되지 않은 경우 테이블을 만들 수 없습니다. 이미 존재한다면 나는 그 안에 그 데이터를 보관하고 싶다. (그리고 단순히 내가 가지고있는 데이터를 추가하십시오) – Tom

1

오히려 놀랄 새 테이블을 만들 떨어 표

IF NOT EXISTS (SELECT 'X' 
        FROM INFORMATION_SCHEMA.TABLES 
        WHERE TABLE_NAME = 'table_name' 
          AND TABLE_SCHEMA = 'schema') 
BEGIN 
    create.. 
END 

를 만들기위한

+0

나는 그것을 시도 할 것이다. – Tom

3

귀하의 SELECT 쿼리는 'TheSchema' 스키마 내에서 테이블을 찾습니다. 내가 스키마 부분을 삭제하는 경우

IF NOT EXISTS (SELECT * 
       FROM INFORMATION_SCHEMA.TABLES 
       WHERE TABLE_SCHEMA = 'TheSchema' 
       AND TABLE_NAME = 'odds_soccer') 
    CREATE TABLE [TheSchema].odds_soccer (...) 
관련 문제