2010-07-30 9 views
10

Lo siento si ya se me preguntó, pero no puedo encontrar nada al respecto.SQL - crear base de datos y tablas en una secuencia de comandos

Estoy moviendo algo de MySQL a SQL Server Quiero tener un archivo .sql para crear una base de datos y tablas dentro de la base de datos. Después de resolver los problemas de sintaxis, he conseguido que los archivos funcionen (casi).

Si me quedo

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

funciona bien, y si me quedo

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

también funciona bien. Pero, si ellos se ejecutan en el mismo archivo me sale este error

Database 'dbname' does not exist 

En este momento, el CREATE TABLE no están dentro de la instrucción IF, lo que me gustaría, pero también me parece que no puede encontrar la sintaxis para ese. ({} no funciona?)

Así que mi gran pregunta es, ¿cómo me aseguro de que un comando en particular en un archivo .sql se complete antes que otro en SQL Server?

Mi segunda pregunta es, ¿cómo incluyo varias instrucciones dentro de una cláusula IF?

Para ser claros, he estado ejecutando esto en sqlcmd.

+3

Estas declaraciones no se están ejecutando en paralelo, por lo que es posible que desee revisar su título. –

Respuesta

17

Ponga un comando GO entre consultas.

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

GO 

CREATE TABLE dbname.dbo.TABLE1 ( 
); 

CREATE TABLE dbname.dbo.TABLEN ( 
); 

En cuanto a poner los enunciados de la tabla en el IF, no sería posible debido al comando GO. Podría crear declaraciones de IF adicionales después, para verificar la preexistencia de cada tabla.

La sintaxis para un bloque si es:

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

Al colocar un GO entre las declaraciones (para crear lotes separados de declaraciones)

0

Hay que separar las declaraciones con la palabra clave GO:

sql query 
GO 

another sql query 
GO 

and so on 
4

Entre la creación de la base de datos y la creación de las tablas necesitará una declaración USE.

USE dbname 

De esta manera las tablas se crearán en el lugar correcto, sin tener que especificar el nombre de DB en todo.

Además, GO y BEGIN ... END como todos los demás dicen.

Cuestiones relacionadas