在代码中,可以指定全局可访问的常量/枚举/等,然后可以在整个应用程序中重复使用。这使得能够使用像'马自达'这样有意义的名称而不是像'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