2016-10-30 99 views
3

我有創建數據庫的T-SQL查詢,如果不存在,就:的MySQL創建數據庫,如果不存在

IF (NOT EXISTS (SELECT name 
       FROM master.dbo.sysdatabases 
       WHERE ('[' + 'DBName' + ']' = 'DBName' 
        OR name = 'DBName'))) 
BEGIN 
    CREATE DATABASE DBName 

    PRINT 'DATABASE_CREATED' 
END 
ELSE 
    PRINT 'DATABASE_EXIST' 

當我想在MySQL中使用此我得到一個錯誤:

'IF' is not valid input at this postion

我改變這個腳本

IF(SELECT COUNT(*) FROM SCHEMA_NAME 
    FROM INFORMATION_SCHEMA.SCHEMATA 
    WHERE SCHEMA_NAME = 'DBName') > 0) 
THEN BEGIN 
    CREATE DATABASE DBName 

    PRINT 'DATABASE_CREATED' 
ELSE 
    PRINT 'DATABASE_EXIST'` 

,但它仍然無法正常工作

如何在MySQL中創建此查詢?

+0

爲什麼不使用簡單的語句,如「CREATE DATABASE IF NOT EXISTS DBName;」 ?看看這個例子 - http://forums.mysql.com/read.php?101,213455,213496 –

+0

你可以看到這個SO帖子 - http://stackoverflow.com/questions/838978/how-to-check -if-mysql-database-exists –

+0

問題重新標記爲微軟'sql-server' – Drew

回答

3

這裏是一個輔助的例子(永久)數據庫。這個數據庫的名字是permanent

一次DB創建:

create schema permanent; 

現在確保你

USE permanent; 

然後

存儲過程:

DROP PROCEDURE IF EXISTS createDB; 
DELIMITER $$ 
CREATE PROCEDURE createDB(IN pDbName VARCHAR(100)) 
BEGIN 
    DECLARE preExisted INT; 
    DECLARE ret VARCHAR(50); 

    SET ret='DATABASE_EXIST'; 
    SELECT COUNT(*) INTO preExisted 
    FROM INFORMATION_SCHEMA.SCHEMATA 
    WHERE SCHEMA_NAME=pDbName; 
    IF preExisted=0 THEN 
     SET @sql=CONCAT('CREATE SCHEMA ',pDbName); -- add on any other parts of string like charset etc 
     PREPARE stmt1 FROM @sql; 
     EXECUTE stmt1; 
     DEALLOCATE PREPARE stmt1; 
     -- right here you could assume it worked or take additional 
     -- step to confirm it 
     SET ret='DATABASE_CREATED'; 
    END IF; 
    SELECT ret as 'col1'; 
END$$ 
DELIMITER ; 

測試:

use permanent; 
call createDB('xyz'); 
-- returns col1 DATABASE_CREATED 
call createDB('xyz'); 
-- returns col1 DATABASE_EXIST 
+0

感謝這就是我需要:) – Szymson

15

我不知道你究竟是如何檢查的,但如果你只是想,如果它不存在,創建它,那麼你可以做

CREATE DATABASE IF NOT EXISTS DBname 
+0

我知道我可以使用'IF NOT EXISTS',但我需要返回字符串''DATABASE_CREATED''或''DATABASE_EXIST'' – Szymson

+1

然後使存儲的過程出它並通過參數 – Drew

+0

@ Szymson如果你知道你有什麼服務器類型,它也會有所幫助。我似乎甚至不是'mysql'所以我重申了你的問題微軟 – Drew

相關問題