Wir definieren derzeit eine Liste von Konstanten (meist diese Aufzählungen entsprechen wir in der Business-Schicht definiert haben) an der Spitze einer gespeicherten Prozedur wie folgt:Was sind die verschiedenen Möglichkeiten, 'Enumerations' in SQL Server zu behandeln?
DECLARE @COLOR_RED INT = 1
DECLARE @COLOR_GREEN INT = 2
DECLARE @COLOR_BLUE INT = 3
Aber diese oft wiederholt erhalten für viele gespeicherte Prozeduren so es gibt viel Doppelarbeit.
Eine andere Technik, die ich verwende, wenn die Prozedur nur eine oder zwei Konstanten benötigt, besteht darin, sie als Parameter an die gespeicherte Prozedur zu übergeben. (mit der gleichen Konvention von Großbuchstaben für konstante Werte). Auf diese Weise bin ich mir sicher, dass die Werte in der Business-Schicht und Daten-Ebene konsistent sind. Diese Methode eignet sich nicht für viele Werte.
Was sind meine anderen Optionen?
Ich verwende SQL Server 2008 und C#, wenn es einen Unterschied macht.
Update Da ich .Net verwende, gibt es irgendeine Möglichkeit, die benutzerdefinierte (CLR) Typen helfen können?
Ein Fremdschlüssel für die Aufzählungen ist gut, aber wie werden die Werte in einer gespeicherten Prozedur verwendet? – tpower
@tpower: Nicht ganz sicher, verstehe ich Ihre Frage, aber ich würde in der Regel die Enum-String-Werte in die Sproc übergeben und sie sofort in Fremdschlüssel mit der Funktion, die ich erwähnt, zu übersetzen. Daher behandelt die App nur Enumerationswerte, der DB-Code behandelt nur die Fremdschlüsselwerte. – Adamski
Was ich meine, ist, wenn die gespeicherte Prozedur einige Geschäftslogik wie 'IF @MyVariable = @ MY_ENUMERATION_VALUE_2 THEN' enthält, wo wir den Wert angeben müssen Fremdschlüssel hier nicht helfen. – tpower