Nel codice uno è possibile specificare costanti/enum/ecc accessibili globalmente una volta che possono essere riutilizzati attraverso l'applicazione. Questo dà la possibilità di usare nomi significativi come "Mazda" invece di numeri come "2".Sbarazzarsi dei numeri "Magic" in SQL Server
Vorremmo fare lo stesso con le nostre stored procedure di SQL Server, ma non siamo sicuri del modo migliore di implementarlo.
Ad esempio per le seguenti tabelle (Lo schema macchina proverbiale):
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
Così, invece di scrivere
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
Vorremmo scrivere qualcosa di simile
SELECT * FROM Car WHERE ManufacturerId = @Nissan
Una restrizione abbiamo è che non possiamo fare affidamento sul Manufacturer.Name che rimane lo stesso per la vita dell'App. Noi pensavamo di avere una colonna "Codice" che non cambia mai ed il join sono guardato in questo modo:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
io sono un po 'titubante su questo in quanto utilizza un join in più e confronti tra stringhe che possono essere errori di ortografia .
Qual è il modo migliore per farlo senza dover dichiarare le variabili in ogni stored procedure?
Giocato con il primo suggerimento, ma è troppo tardi per il secondo. Forse la prossima volta. –
La cosa che diventa difficile con questo problema è che il numero magico di solito corrisponde a un enum nel codice del client. A un certo punto si rovinerà la sincronizzazione della ricerca SQL con il client enum. MS SQL Server offre un punto di integrazione molto ordinato qui: è possibile codificare un UDF CLR per restituire il valore enum, applicando essenzialmente alcuni tipi di sicurezza di runtime. Devi comunque assicurarti che le tue query abbiano i nomi dei valori enum, ma non ho mai trovato il modo di aggirare questa parte del problema. –