W kodzie można określić globalnie dostępne stałe/wyliczenia/itd., Po czym można je ponownie wykorzystać za pośrednictwem aplikacji. Daje to możliwość używania znaczących nazw takich jak "Mazda" zamiast takich jak "2".Pozbywanie się liczb "magicznych" w SQL Server
Chcielibyśmy zrobić to samo z naszymi procedurami przechowywanymi SQL Server, ale nie jesteśmy pewni najlepszego sposobu implementacji tego.
np poniższych tabelach (Przysłowiowy schematu samochodów):
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
Więc zamiast pisać
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
Chcielibyśmy napisać coś jak
SELECT * FROM Car WHERE ManufacturerId = @Nissan
jedno ograniczenie mamy to, że nie możemy polegać na Manufacturer.Name pozostaje takie samo przez całe życie aplikacji. Zrobiliśmy pomyśleć o kolumnę „kod”, który nigdy się nie zmienia i sprzężenia są spojrzał tak:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
Jestem trochę niezdecydowany na ten temat, gdyż wykorzystuje dodatkowy dołączyć i porównań ciąg znaków, który może być błędnie napisane .
Jaki jest najlepszy sposób, aby to osiągnąć bez konieczności zadeklarowania zmiennych w każdej zapisanej procedurze?
Zabawia się z pierwszą sugestią, ale jest już za późno na drugą. Może następnym razem. –
To, co sprawia problemy z tym problemem, polega na tym, że magiczna liczba zwykle odpowiada wyliczeniu w kodzie klienta. W pewnym momencie zepsujesz synchronizację zapytania SQL z wyliczeniem klienta. MS SQL Server oferuje tutaj bardzo schludny punkt integracji: można kodować UDF CLR, aby zwrócić wartość wyliczenia, zasadniczo wymuszając pewne bezpieczeństwo typu uruchomieniowego. Nadal musisz upewnić się, że twoje zapytania otrzymują nazwy wartości wyliczeniowych, jednak nigdy nie znalazłem sposobu obejścia tej części problemu. –