actualmente se define una lista de constantes (en su mayoría éstas corresponden a las enumeraciones que hemos definido en la capa de negocio) en la parte superior de un procedimiento almacenado de este modo:¿Cuáles son las diferentes formas de manejar 'Enumeraciones' en el servidor SQL?
DECLARE @COLOR_RED INT = 1
DECLARE @COLOR_GREEN INT = 2
DECLARE @COLOR_BLUE INT = 3
Pero estos a menudo se repiten para muchos procedimientos almacenados de tal manera hay mucha duplicación.
Otra técnica que uso si el procedimiento necesita solo una o dos constantes es pasarlas como parámetros al procedimiento almacenado. (utilizando la misma convención de mayúsculas para valores constantes). De esta forma, estoy seguro de que los valores en la capa empresarial y la capa de datos son consistentes. Este método no es bueno para muchos valores.
¿Cuáles son mis otras opciones?
Estoy usando SQL Server 2008 y C# si hace alguna diferencia.
Actualización Porque estoy usando .Net ¿hay alguna manera en que los tipos definidos por el usuario (CLR) puedan ayudar?
Una clave foránea en las enumeraciones es buena, pero ¿cómo se usan los valores en un procedimiento almacenado? – tpower
@tpower: No estoy del todo seguro de que entienda su pregunta, pero normalmente pasaría los valores de cadena enum en el sproc y los traduciría inmediatamente a claves externas utilizando la función que mencioné. Por lo tanto, la aplicación solo trata con valores enum, el código DB solo trata con los valores de clave foránea. – Adamski
Lo que quiero decir es que si el procedimiento almacenado contiene alguna lógica empresarial como 'IF @ MyVariable = @ MY_ENUMERATION_VALUE_2 THEN' donde necesitamos indicar el valor, las claves externas no ayudan aquí. – tpower