用常量的动态执行替换一大块重复的查询文本?

时间:2017-12-01 09:09:20

标签: sql sql-server

我有一段非常复杂的CASE语法,可以重复多次。 这个程序工作得很好但是它变得难以阅读,并且它使得周围的语法也更难阅读。

有没有办法将这部分代码放在常量中然后只需在查询中编写常量名称而不需要动态执行?

例如

DECLARE @CASE = 'LONG UGLY CASE STATEMENT'
SELECT Column1, Column, Column3, @CASE, Column4
FROM Table1 WHERE Conditions 

1 个答案:

答案 0 :(得分:0)

这听起来类似于需要为DRY(不要重复自己)原则编写代码。 也许这样的代码会有所帮助。

在每种情况下,Z代表复杂的CASE代码 选项1应该比2更高效。

/*
    DRY Option 1
*/
;WITH SimplifiedCaseCTE AS
(
    SELECT   A
            ,B
            ,Z  =   CASE
                        WHEN A LIKE 'moo%' THEN 1
                        ELSE 2
                    END
    FROM TableA
)
SELECT   A
        ,B
        ,Z
        ,X = Z * 10
FROM SimplifiedCaseCTE

/*
    DRY Option 2
*/
SELECT   TA.A
        ,TA.B
        ,CA.Z
        ,X = CA.Z * 10
FROM TableA     TA
CROSS 
APPLY
(
    SELECT Z =  CASE
                    WHEN A LIKE 'moo%' THEN 1
                    ELSE 2
                END
)               CA