如何在TSQL中使用枚举,而不对SQL脚本/proc进行硬编码?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (20)

我们的C#代码中有枚举:

public enum JobStatus
{        
  Ready = 0,      
  Running = 1,        
  Cancelling = 2,
}

这些值也存储在数据库字段中,我们有批次TSQL(主要是存储的Process,以及一些批处理和SSIS)的数据处理:

SELECT TOP 1 @JobSID = JobSID
FROM Job 
WHERE Status = 0 /* JobStatus.Ready */
ORDER BY SubmitDate ASC

CREATE TABLE ImportCrossEffect(
    /* lots deleted */      
    Source tinyint 
      DEFAULT 1 NOT NULL -- 0: Unknown (default), 1:Imported, 2:Keyed
) 

提问于
用户回答回答于

在一个项目中,我们定义了一个属性,该属性应用于存储数据库中期望的表和值的每个枚举成员,单元测试验证了链接。

用户回答回答于

您可以始终将枚举的值传递到正在尝试执行的存储的proc/命令中。这样,您就不必担心数据库中的枚举。

如果要将枚举存储在数据库中,那么我建议您创建一个视图(可能以枚举命名),如下所示:

create view JobStatus
    select 0 as Ready, 1 as Running, 2 as Cancelling

然后,如果需要,可以在视图上访问/连接。

注意,查询优化器将对上述内容的任何引用视为常量扫描/标量操作,而不是表扫描,因此,如果访问实际表,则不会引发读取。

扫码关注云+社区