2010-07-30 22 views
10

Scusate se è già stato chiesto, ma non riesco a trovare nulla su questo.SQL: creazione di database e tabelle in uno script

Sto spostando qualcosa da MySQL a SQL Server Voglio avere un file .sql per creare un database e tabelle all'interno del database. Dopo aver elaborato i nodi di sintassi, ho ottenuto il funzionamento dei file (quasi).

Se corro

IF db_id('dbname') IS NULL 
    CREATE DATABASE dbname 

funziona bene, e se corro

CREATE TABLE dbname.dbo.TABLE1 (
); 
... 
CREATE TABLE dbname.dbo.TABLEN (
); 

funziona anche bene. Ma, se li corro nello stesso file ottengo questo errore

Database 'dbname' does not exist 

In questo momento, il CREATE TABLE non sono all'interno l'istruzione IF, che mi piacerebbe, ma anche io non riesco a trovare la sintassi per quella. ({} non funziona?)

Quindi la mia grande domanda è, come faccio a garantire che un particolare comando in un file .sql sia completato prima di un altro in SQL Server?

La seconda domanda è, come posso includere più istruzioni all'interno di una clausola IF?

Per essere chiari, l'ho eseguito in sqlcmd.

+3

Queste istruzioni non vengono eseguite in parallelo, quindi è possibile che si desideri rivedere il titolo. –

risposta

17

Inserire un comando GO tra le query.

IF db_id('dbname') IS NULL 
    CREATE DATABASE dbname 

GO 

CREATE TABLE dbname.dbo.TABLE1 ( 
); 

CREATE TABLE dbname.dbo.TABLEN ( 
); 

Per quanto riguarda il mettere le istruzioni della tabella nell'IF, non sarebbe possibile a causa del comando GO. È possibile creare ulteriori istruzioni IF in seguito, per verificare la preesistenza di ogni tabella.

La sintassi per un blocco, se è:

IF condition 
BEGIN 
    .... 
    .... 
END 
1

Inserendo un GO tra le dichiarazioni (per creare lotti separati di istruzioni)

0

Bisogna separare le dichiarazioni con la parola chiave GO:

sql query 
GO 

another sql query 
GO 

and so on 
4

Tra la creazione del database e la creazione delle tabelle è necessaria una dichiarazione USE.

USE dbname 

In questo modo le tabelle saranno create nel posto giusto, senza dover specificare il nome di DB su tutto.

Inoltre, GO e BEGIN ... END come tutti gli altri stanno dicendo.

Problemi correlati