在代码中,可以指定一次全局可访问的常量/枚举/等,然后可以在整个应用程序中重用它们.这使得能够使用像'Mazda'这样有意义的名称而不是像'2'这样的数字.
我们希望在SQL Server存储过程中也这样做,但不确定实现它的最佳方法.
例如,对于下表(众所周知的汽车模式):
Car ManufacturerId
350Z 1
Hilux 2
Yaris 2
ManufacturerId Name
1 Nissan
2 Toyota
Run Code Online (Sandbox Code Playgroud)
所以不要写作
SELECT * FROM Car WHERE ManufacturerId = 1 -- Nissan
Run Code Online (Sandbox Code Playgroud)
我们想写类似的东西
SELECT * FROM Car WHERE ManufacturerId = @Nissan
Run Code Online (Sandbox Code Playgroud)
我们的一个限制是我们不能依赖于Manufacturer.Name在App的生命周期中保持不变.我们确实考虑过一个永远不会改变的"Code"列,并且这样的联接被查找:
SELECT *
FROM Car c
INNER JOIN Manufacturer m ON c.ManufacturerId = m.ManufacturerId
WHERE m.Code = 'Nissan'
Run Code Online (Sandbox Code Playgroud)
我对此有点犹豫,因为它使用额外的连接和字符串比较,可以拼写错误.
无需在每个存储过程中声明变量,最好的方法是什么?
我们通过几种方式做到了这一点: