sql - 摆脱 SQL Server 中的 "Magic"数字

标签 sql sql-server

在代码中,我们可以指定全局可访问的常量/枚举/等,然后可以在整个应用程序中重用。这样就可以使用“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/

相关文章:

php - 在 MySQL ENUM 值中使用撇号将填充 HTML 组合框以进行数据库搜索

sql - 如何在SQL Server中获取行的行ID

sql - 从表中选择一个字段具有相同值的行

sql-server - SQL Server 插入性能

Sql 查询在数据库中查找临时表

sql - 如何计算具有最小值的列的日期差异

mysql - 不是 group by 语句

mysql - 将 .sql 转换为 .bak

c# - 如何为我的应用程序构建搜索机制?

sql-server - SSRS 报告订阅因错误而结束