我有一段非常复杂的CASE
语法,可以重复多次。
这个程序工作得很好但是它变得难以阅读,并且它使得周围的语法也更难阅读。
有没有办法将这部分代码放在常量中然后只需在查询中编写常量名称而不需要动态执行?
例如
DECLARE @CASE = 'LONG UGLY CASE STATEMENT'
SELECT Column1, Column, Column3, @CASE, Column4
FROM Table1 WHERE Conditions
答案 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