En el código uno puede especificar constantes/enums/etc accesibles en el mundo una vez que luego se pueden reutilizar a través de la aplicación. Esto le da la capacidad de usar nombres significativos como 'Mazda' en lugar de números como '2'.Deshacerse de los números "mágicos" en SQL Server
Nos gustaría hacer lo mismo con nuestros procedimientos almacenados de SQL Server, pero no estamos seguros de la mejor manera de implementar esto.
Por ejemplo, para las siguientes tablas (El esquema coche proverbiales):
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
Así que en lugar de escribir
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
Nos gustaría escribir algo como
SELECT * FROM Car WHERE ManufacturerId = @Nissan
Una restricción lo que tenemos es que no podemos confiar en que Manufacturer.Name permanezca igual durante la vida de la aplicación. Nos hacían pensar en tener una columna "Código" que nunca cambia y las combinaciones que se buscan de esta manera:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
Estoy un poco indeciso sobre este, ya que utiliza un extra y se unen a las comparaciones de cadenas que pueden estar mal escritas .
¿Cuál es la mejor manera de lograr esto sin tener que declarar las variables en cada procedimiento almacenado?
Jugó con la primera sugerencia, pero es demasiado tarde para la segunda. Quizás la próxima vez. –
Lo que se pone difícil con este problema es que el número mágico generalmente corresponde a una enumeración en su código de cliente. En algún momento se arruinará la sincronización de su búsqueda SQL con la enumeración del cliente. MS SQL Server ofrece aquí un punto de integración muy ordenado: puede codificar una UDF de CLR para devolver el valor enum, lo que básicamente impone cierto tipo de seguridad de tipo de tiempo de ejecución. Sin embargo, todavía necesita asegurarse de que sus consultas obtengan los nombres de los valores enum, nunca he encontrado una forma de solucionar esta parte del problema. –