问题:在SQL脚本或存储过程中避免使用魔术数字或硬编码值的其他策略是什么?
考虑存储过程,其作业是根据其StatusID或某些其他FK查找表或值范围来检查/更新记录的值.
考虑一个状态表,其中ID是最重要的,因为它是另一个表的FK:
要避免的SQL脚本类似于:
DECLARE @ACKNOWLEDGED tinyint
SELECT @ACKNOWLEDGED = 3 --hardcoded BAD
UPDATE SomeTable
SET CurrentStatusID = @ACKNOWLEDGED
WHERE ID = @SomeID
这里的问题是这不是可移植的,而是明确地取决于硬编码的值.当将其部署到具有身份插入的另一个环境时,存在微妙的缺陷.
同时试图避免基于SELECT的文本描述/名称的状态:
UPDATE SomeTable
SET CurrentStatusID = (SELECT ID FROM [Status] WHERE [Name] = 'Acknowledged')
WHERE ID = @SomeID
问题:在SQL脚本或存储过程中避免使用魔术数字或硬编码值的其他策略是什么?
关于如何实现这一点的其他一些想法:
>添加一个新的位列(命名为“IsAcknowledged”)和一组规则,其中只能有一行的值为1.这将有助于查找唯一的行:SELECT ID FROM [Status] WHERE [IsAcknowledged] = 1)