2010-07-30 3 views
10

Entschuldigung, wenn bereits gefragt, aber ich kann nichts zu diesem Thema finden.SQL - Datenbank und Tabellen in einem Skript erstellen

Ich verschiebe etwas von MySQL zu SQL Server Ich möchte eine .sql-Datei erstellen Sie eine Datenbank und Tabellen innerhalb der Datenbank. Nach dem Ausarbeiten von Syntax-Knicks habe ich die Dateien zum Arbeiten gebracht (fast).

Wenn ich

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

führen Sie es funktioniert gut, und wenn ich

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

führen Sie es funktioniert auch gut. Aber, wenn ich sie in der gleichen Datei laufen bekomme ich diesen Fehler

Database 'dbname' does not exist 

Gerade jetzt, die CREATE TABLE-Anweisungen sind nicht in der IF-Anweisung, die ich möchte, aber ich kann auch nicht scheinen, um die Syntax zu finden Das. ({} funktioniert nicht?)

So ist meine große Frage, Wie kann ich sicherstellen, dass ein bestimmter Befehl in einer SQL-Datei vor einem anderen in SQL Server abgeschlossen ist?

Meine zweite Frage ist, wie schließe ich mehrere Anweisungen innerhalb einer IF-Klausel ein?

Um klar zu sein, habe ich dies in sqlcmd ausgeführt.

+3

Diese Anweisungen werden nicht parallel ausgeführt, daher sollten Sie möglicherweise Ihren Titel überarbeiten. –

Antwort

17

Geben Sie einen GO Befehl zwischen Abfragen ein.

Wie zum Setzen der Tabelle Anweisungen in der IF, könnten Sie nicht wegen der GO-Befehl. Sie können anschließend zusätzliche IF-Anweisungen erstellen, um die Präexistenz der einzelnen Tabellen zu überprüfen.

Die Syntax für einen Block, wenn ist:

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

Durch ein GO zwischen Aussagen Platzierung (getrennte Chargen von Anweisungen erstellen)

0

Sie haben die Aussagen mit dem GO Schlüsselwort zu trennen:

sql query 
GO 

another sql query 
GO 

and so on 
4

Zwischen dem Erstellen der Datenbank und dem Erstellen der Tabellen benötigen Sie eine USE-Anweisung.

USE dbname 

Auf diese Weise werden die Tabellen an der richtigen Stelle erstellt, ohne dass der DB-Name für alles angegeben werden muss.

Auch, GO und BEGIN ... END wie jeder andere sagt.

Verwandte Themen