在代码中,我们可以指定全局可访问的常量/枚举/等,然后可以在整个应用程序中重用。这样就可以使用“Mazda”等有意义的名称,而不是“2”等数字。
我们希望在 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在应用程序的生命周期内保持不变。我们确实考虑过有一个永远不会改变的“Code”列,并且像这样查找连接:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
我对此有点犹豫,因为它使用了额外的连接和可能拼写错误的字符串比较。
无需在每个存储过程中声明变量即可完成此任务的最佳方法是什么?
最佳答案
我们通过几种方式做到了这一点:
- 用户定义的函数,按名称返回“魔数(Magic Number)”。
- 使用 nchar(4) 列而不是 int 列,并得出稍微不那么难以理解的代码。所以 Nissan 将是“NISN”而不是 1。好一点。
关于sql - 摆脱 SQL Server 中的 "Magic"数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1046843/