c语言sql消除硬编码,SQL:避免硬编码或魔术数字

问题:在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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值