2017-11-09 10 views
0

Ich fange eine neue SQL Server Azure DB von Grund auf neu. Ich möchte eine starke Quellcodeverwaltung einrichten, daher möchte ich vorsichtig sein, wie ich alle meine Tabellen erstelle.T-SQL-Tabellenerstellung in Quelle

Was ist die beste Methode, um zu überprüfen, ob die Tabelle existiert und nur meine CREATE TABLE-Anweisung auszuführen, wenn sie noch nicht existiert? Ich arbeite mit der Übergabe von dynamischem SQL an eine gespeicherte Prozedur, die nach dem Vorhandensein der Tabellen sucht, aber das ist so einschränkend. Es muss einen bevorzugten Weg geben, dies draußen zu tun. Ich meine, ich könnte jeder Abfrage mit vorangestellt werden:

IF NOT EXISTS (SELECT * 
       FROM sys.objects 
       WHERE object_id = OBJECT_ID(N'[dbo].j[myTable]') AND type in(N'U')) 
BEGIN 
    CREATE TABLE myTable(....) 
END 

Aber das ist ziemlich repetitiv.

Antwort

0

Einfacher ausgedrückt:

IF NOT EXISTS (SELECT * FROM sys.tables WHERE Name = N'myTable') 
    CREATE TABLE myTable ....... 

Idee: Verwenden Sie die fokussiertersys.tables Katalogsicht anstelle des allumfassenden sys.objects - dann müssen Sie nicht diese eher unintuitive type Werte erinnern ... .. - aber ja, das ist der sicherste Weg, um diese Art von Code zu tun.

Ab SQL Server 2016 können Sie auch den

DROP TABLE IF EXISTS myTable; 
CREATE TABLE myTable ....... 

Befehl (das ist neu - siehe hier: https://blogs.msdn.microsoft.com/sqlserverstorageengine/2015/11/03/drop-if-exists-new-thing-in-sql-server-2016/)