2013-10-08 92 views
1

我想寫一個小腳本來創建一個數據庫,如果它不存在,並創建該數據庫的表,如果該表不存在。我有這樣的:創建數據庫和表條件

IF (db_id('db') is null) BEGIN 
    print 'Must create the database!'; 
    CREATE DATABASE db; 
END 

USE db; 

IF (object_id('test_table', 'U') is null) BEGIN 
    print 'Must create the table!'; 
    CREATE TABLE test_table (
     id int 
    ); 
END 

我得到一個奇怪的錯誤與此:

Database 'db' does not exist. Make sure that the name is entered correctly. 

我猜,它的解析腳本運行之前和發現「DB」沒有按」不存在,所以它不能使用它。

必須有解決方案。任何幫助表示讚賞。

已解決!

在發佈GO關鍵字解決問題後5分鐘,我意識到了這一點。這裏是固定代碼:

IF (db_id('db') is null) BEGIN 
    print 'Must create the database!' 
    CREATE DATABASE db; 
END 

GO 
USE db 

IF (object_id('test_table', 'U') is null) BEGIN 
    print 'Must create the table!'; 
    CREATE TABLE test_table (
     id int 
    ); 
END 

對不起浪費大家的時間。

+0

您使用的是MS-SQL,Oracle,MySQL嗎? –

+0

MS-SQL。我發現GO關鍵字有很大的不同。我認爲它解決了這個問題。 –

+1

是的,你應該使用sql server中的一些語句之間,我總是忘記哪些,所以我只是垃圾郵件GO:P –

回答

2

SQL語句被解析爲一個批次。在SQL Server中,您可以使用GO來執行此操作。在MySQL和SQL Server中,都可以使用BEGIN和END。

如果您想在不同的實例中將單獨的塊提交到數據庫,可以分別使用BEGIN TRANS/COMMIT TRANS和START TRANSACTION/COMMIT for SQL Server和MySQL。

0

我可能會建議使用內置的SQL語法 -

CREATE DATABASE名IF NOT EXISTS;

而且隨後

CREATE TABLE名(定義)IF NOT EXISTS;

+0

這似乎並不奏效。我正在使用MS-SQL :) –

1

東西沿着Check if table exists in SQL Server線可能會工作(有輕微的變化),除非你除了打破他們

IF (NOT EXISTS (SELECT * 
       FROM INFORMATION_SCHEMA.TABLES 
       WHERE TABLE_SCHEMA = 'TheSchema' 
       AND TABLE_NAME = 'TheTable')) 
BEGIN 
    --Do Stuff 
END