2017-12-05 1 views
0

Ich habe alle meine Skripts und Verfahren für dieses Datenbankprojekt bereit, aber ich möchte eine gespeicherte Prozedur haben, die meine Datenbank und alle meine Tabellen erstellt. Möglicherweise wird es (wenn es existiert) auch in den Proc fallen lassen, aber im Moment konzentriere ich mich darauf, es zu erstellen.Kann eine Stored Procedure auf dem Master-DB einen regulären DB erstellen? SQL Server 2012 und höher

Ich nehme an, es hat etwas mit der Master-DB zu tun, kann es aber nicht herausfinden.

Wäre es in etwa so aussehen:

USE master 

IF OBJECT_ID('dbo.myDB') IS NULL 

CREATE PROCEDURE myNewDatabase 
BEGIN 
CREATE DATABASE myDB 
END 

ELSE 
PRINT 'myDB Database already exists' 

Hinweis: dann würde ich eine andere gespeicherte Prozedur zu tun haben Recht, alle Tabellen zu erstellen? Auch ein bisschen verwirrt, da die 'ob object_id ist null' in der Regel nach Prozedurnamen sucht, aber dieser prüft den Datenbanknamen?

Kann mir jemand sagen, ob mein Denken auf dem richtigen Weg ist?

Danke

+0

„I würde gerne eine gespeicherte Prozedur haben, die tatsächlich meine Datenbank und alle meine Tabellen erstellt "Warum? Ich habe noch nie von jemandem gehört, der das machen wollte. –

+0

Das ergibt überhaupt keinen Sinn. Abgesehen davon, dass Sie komplett komisch sind, müssten Sie dafür dynamic sql verwenden. Ich kann einfach nicht einmal anfangen zu verstehen, warum dies einen Vorteil bringen würde. –

+0

Ja, vielleicht verstehe ich etwas falsch, aber mein Professor, der ein DBA für JP Morgan ist, sagt, wenn wir das tun, bekommen wir extra Kredit für unser Projekt? Ich nehme an, er weiß, wovon er spricht, aber auf meiner Ebene bin ich mir ehrlich gesagt nicht sicher. Versuche zu lernen. – Dylano236

Antwort

1

Ich sage nicht, es ist eine gute Idee Datenbanken auf diese Weise zu erstellen (weil es nicht ist), aber wenn Sie wirklich wollen, gehen Sie wie folgt:

CREATE PROC dbo.myNewDatabase 
AS 
SET NOCOUNT ON; 

DECLARE @dbname VARCHAR(100) = 'myDB' 
     ,@path VARCHAR(1000) = 'C:\Test\' 
     ,@sql VARCHAR(1000); 



IF DB_ID(@dbname) IS NULL 
BEGIN 
    SELECT 
     @sql = 
     'CREATE DATABASE ' + @dbname + ' ON (NAME = ' + @dbname 
     + '_Data, FILENAME = ''' + @path + @dbname + '.mdf'')' 
     + ' LOG ON (NAME = ' + @dbname + '_Log, FILENAME = ''' + @path + @dbname 
     + '.ldf'')'; 
    EXEC(@sql); 
END 
ELSE 
PRINT 'myDB Database already exists' 

GO 
+0

Sie können die falsche Syntaxhervorhebung von StackOverflow hier ignorieren. –

+0

Vielen Dank. Ich schätze die Hilfe. Es klang auch seltsam für mich. Jetzt weiß ich, dass ich nicht der Einzige bin. – Dylano236

+1

Sie könnten dies vereinfachen, wenn Sie die Dateinamen und den Pfad möchten und überspringen. Einfach die Datenbank mit einem Namen erstellen funktioniert. Es erstellt standardmäßig die Daten- und Protokolldateien mit dem gleichen Namen wie die Datenbank und legt sie in den Standardordnern ab. Und mache den DB-Namen zu einem Parameter und das würde es ziemlich genau machen. –

Verwandte Themen