在代码中,可以指定一次全局可访问的常量/enums/etc,然后通过应用程序重用这些常量/enums/etc。这使人们能够使用有意义的名字,如“马自达”,而不是像“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
我们有一个限制,那就是我们不能依赖于制造商。名称在应用程序的生命周期中保持不变。我们确实考虑过拥有一个永不更改的列“code”,连接的查找方式如下:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
我对此有点犹豫,因为它使用了额外的连接和字符串比较,这些比较可能拼写错误。
在不必声明每个存储过程中的变量的情况下,实现这一点的最佳方法是什么?