Bedingte Kompilierung der gespeicherten SQL Server-Prozedur

8

Kurzversion: Gibt es eine Möglichkeit, Teile des TSQL-Codes in einem SQL Server-Datenprojekt mithilfe von SQL Server-Datentools für Visual Studio 2010 bedingt zu kompilieren?

Ich verwende SQL Server-Datentools in Visual Studio 2010, um an einer experimentellen SQL Server Express-Datenbank zu arbeiten. Das letztendliche Ziel, wenn die Dinge gut funktionieren, wäre eine SQL Server-Plattform für Unternehmen. Ich habe sowohl eine 2008-Instanz auf einer Box als auch eine 2012-Instanz auf einer anderen, da mein Unternehmen gerade für die vielen Unternehmensdatenbanken von 2008 auf 2012 migriert.

In anderen von mir verwendeten Programmiersprachen erleichtern Präprozessoranweisungen das bedingte Kompilieren von Teilen einer Codebasis. Die gebräuchlichste Verwendung hierfür ist, unterschiedlichen Code für unterschiedliche Plattformen in eingeschränkten Abschnitten zu haben oder das Debuggen von Ausgabecode aus Release-Builds auszuschließen .

Beides kann bei einigen Geschäftsabläufen, an denen ich arbeite, sehr hilfreich sein. Gibt es so etwas? Ich weiß, dass ich sqlcmdVariablen verwenden kann, um bestimmte Werte während der Bereitstellung auszutauschen, aber ich kann nicht herausfinden, wie ich diese verwenden kann, um nachfolgende Codeabschnitte einzuschließen oder auszuschließen.

Beispiel:

#IF $(DebugVersion) = 'True'
    -- A bunch of useful PRINTs and what not
#ELSE
    SET NOCOUNT ON
#ENDIF

#IF $(SSVersion) = '2012'
    SET @pretty_date = FORMAT(@some_date, 'dddd, MMM dd, yyyy')
#ELSE
    SET @pretty_date = CAST(@some_date AS nvarchar(12))
#ENDIF
Joshua Honig
quelle

Antworten:

6

Mir ist leider nicht bewusst, dass dies mit SSDT möglich ist.

Abhängig davon, wie groß das Projekt ist und wie viele Verfahren Sie mit 2012-Goodies verbessern möchten, kann es mit Composite-Projekten verwaltet werden .

SSDT kann ein Datenbankprojekt mit einem oder mehreren referenzierten Datenbankprojekten oder Dacpacs kombinieren, um ein einzelnes zusammengesetztes Datenbankschema zu beschreiben. Durch die Verwendung eines zusammengesetzten Projekts kann eine große Datenbank in besser verwaltbare Teile zerlegt werden, verschiedene Personen oder Teams können die Verantwortung für verschiedene Teile des Gesamtschemas übernehmen und Datenbankobjektdefinitionen in mehreren Datenbanken wiederverwenden.

Der Begriff wäre, ein Basisprojekt zu haben, das die allgemeinen Objektdefinitionen und versionierungsspezifischen Projekte für Prozeduren enthält, die neue Funktionen verwenden. Das Projekt 2012 würde auf das Basisprojekt verweisen und ein Kompilieren / Erstellen würde Objekte aus beiden kombinieren.

Die PITA wäre, dass Sie ein Objekt im Basisprojekt nicht mit einem Objekt in einem Verbund überschreiben können, sodass Sie Basisprojekte für 2008 und 2012 verwalten müssten. Wenn Sie eine 2012-Version eines bestimmten Verfahrens wünschen, müssen Sie diese aus der Basis entfernen und in 2008- und 2012-Projekten eine Version erstellen.

Mark Storey-Smith
quelle
2

Ich habe eine offene Diskussion über MSDN über diesen Bedarf geführt. Habe nicht viel Fortschritte gemacht. In der idealen Situation können Sie Datenbankobjekte in Basis-SSDT-Projekten als "vererbbar" kennzeichnen, sodass andere Projekte, die auf das Basisprojekt oder den DAC verweisen, sich nicht über das doppelte Objekt beschweren und nur das Basisobjekt oder den "Stub" erstellen, wenn es existierte nicht. Dies würde es Ihnen ermöglichen, "Ebenen" von Datenbankmodellen zu haben. Siehe meinen Beitrag zu msdn Erweitern von SSDT-Verbundlösungen mit überschriebenen gespeicherten Prozeduren

user2624727
quelle