在代碼中,可以指定全局可訪問的常量/枚舉/等,然後可以在整個應用程序中重複使用。這使得能夠使用像'馬自達'這樣有意義的名稱而不是像'2'這樣的數字。擺脫SQL Server中的「魔術」號碼
我們想在我們的SQL Server存儲過程中做同樣的事情,但不確定實現這一點的最佳方式。
如以下表格(諺語車模式)的
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
因此,而不是寫
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
我們想寫點東西像
SELECT * FROM Car WHERE ManufacturerId = @Nissan
一個限制我們得到的是我們不能依賴Manufacturer.Name在應用程序的生命中保持不變。我們沒想到有一列「守則」是永遠不會改變和聯接是看着像這樣:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
我對這個有點猶豫,因爲它使用一個額外的加入,可以拼錯字符串比較。
什麼是最好的方式來完成,而不必在每個存儲過程中聲明變量?
第一個建議被玩弄,但對於第二個建議來說太晚了。下次吧。 – 2009-06-26 01:30:49
這個問題變得困難的事情是幻數通常對應於客戶端代碼中的枚舉。在某些時候,你會搞砸你的SQL查詢與客戶端枚舉。 MS SQL Server在這裏提供了一個非常簡潔的集成點:您可以編寫一個CLR UDF來返回枚舉值,從本質上強化一些運行時類型的安全性。您仍然需要確保您的查詢獲得枚舉值的名稱,但我從來沒有找到解決這部分問題的方法。 – 2009-06-26 12:15:56