避免在查询中重复SQL片段?

Roy*_*mir 1 sql-server sql-server-2008

我有这个查询(伪代码)

SELECT 
    a = 1,
    b = 2,
    c = CASE 
            WHEN ISNULL(
                         (SELECT MONTH(GETDATE()) <---long query
                         ), 0) = 0 THEN 'found'
            ELSE 
              SELECT MONTH(GETDATE())     <--- repeated long query
        END
Run Code Online (Sandbox Code Playgroud)

问题是SELECT MONTH(GETDATE())实际上这是很长的查询.

这个"长表达式"是否有任何解决方法不会在查询中出现两次?

PS

我有一个计算SELECT MONTH(GETDATE())外部变量的解决方案......但我想弄清楚是否有内联解决方案.

Yuc*_*uck 5

您有多种选择:

  • 用户定义的函数(UDF)
  • 查看
  • 公用表表达式(CTE)
  • 交叉/外部应用

根据数据的处理方式,将确定最适合的数据.您的问题没有提供足够的细节来明确提出建议,但这些值得关注.

使用UDF时要小心,因为它们会迅速阻碍性能.我的经验法则是为简单的数据转换或数学计算编写UDF.我试图避免在函数中执行复杂的基于集合的操作,并且更喜欢视图或CTE.