Trong mã một có thể chỉ định các hằng số có thể truy cập toàn cục/enums/etc sau đó có thể được sử dụng lại thông qua ứng dụng. Điều này cho phép sử dụng các tên có ý nghĩa như 'Mazda' thay vì các số như '2'.Loại bỏ các số "Magic" trong SQL Server
Chúng tôi muốn thực hiện tương tự với quy trình lưu trữ SQL Server của chúng tôi, nhưng không chắc chắn cách tốt nhất để thực hiện điều này.
Ví dụ cho các bảng sau đây (Giản đồ xe ngôn):
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
Vì vậy, thay vì viết
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
Chúng tôi muốn viết một cái gì đó giống như
SELECT * FROM Car WHERE ManufacturerId = @Nissan
Một hạn chế chúng tôi có là chúng tôi không thể dựa vào Manufacturer.Name ở cùng cho cuộc sống của ứng dụng. Chúng tôi đã suy nghĩ về việc có một cột "Mã" mà không bao giờ thay đổi và tham gia đang nhìn lên như thế này:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
tôi là một chút do dự về vấn đề này vì nó sử dụng thêm tham gia và so sánh chuỗi có thể được sai chính tả .
Cách tốt nhất để thực hiện điều này là gì mà không phải khai báo các biến trong mỗi Quy trình được lưu trữ?
Được đề xuất với đề xuất đầu tiên, nhưng đã quá trễ cho đề xuất thứ hai. Có lẽ lần sau. –
Điều khó khăn với vấn đề này là số ma thuật thường tương ứng với một enum trong mã máy khách của bạn. Tại một số điểm, bạn sẽ vít lên đồng bộ hóa tra cứu SQL của bạn với enum khách hàng. MS SQL Server cung cấp một điểm tích hợp rất gọn gàng ở đây: bạn có thể mã một UDF CLR để trả về giá trị enum, về cơ bản thực thi một số kiểu an toàn thời gian chạy. Bạn vẫn cần phải đảm bảo truy vấn của bạn có được tên của các giá trị enum ngay cả khi tôi đã không bao giờ tìm thấy một cách xung quanh phần này của vấn đề. –