Sql 重构查询函数中的硬编码值

Sql 重构查询函数中的硬编码值,sql,sql-server,refactoring,hardcoded,Sql,Sql Server,Refactoring,Hardcoded,有人对如何更好地重构下面的代码有什么建议吗?我已重命名项目名称以简化 我只继承了这一点(对于导入过程),并且它在我看来不是很有效,尤其是对于函数中的硬编码值。我正在考虑将硬编码的值放入一个表中,并引用它而不是函数,但我不确定如何根据查询中的重复列来实现这一点 MyTable MyTableId INT, MyTableOtherColumn VARCHAR(100), MyTableDesc1 VARCHAR(10), MyTableDesc2 VARCHAR(1

有人对如何更好地重构下面的代码有什么建议吗?我已重命名项目名称以简化

我只继承了这一点(对于导入过程),并且它在我看来不是很有效,尤其是对于函数中的硬编码值。我正在考虑将硬编码的值放入一个表中,并引用它而不是函数,但我不确定如何根据查询中的重复列来实现这一点

MyTable
    MyTableId INT,
    MyTableOtherColumn VARCHAR(100),
    MyTableDesc1 VARCHAR(10),
    MyTableDesc2 VARCHAR(10),
    . . .
    MyTable24 VARCHAR(10),
    MyTable25 VARCHAR(10),
    etc.

MyFunction
    RETURNS @myFunctionTable TABLE
    (
        myFunctionDesc VARCHAR(256),
        myFunctionCode VARCHAR(10)
    )
    AS 
    BEGIN
        INSERT INTO @myFunctionTable (myFunctionDesc, myFunctionCode) VALUES ('My Function Desc 1', 'MYCODE1');
        INSERT INTO @myFunctionTable (myFunctionDesc, myFunctionCode) VALUES ('My Function Desc 2', 'MYCODE2');
        . . .
        INSERT INTO @myFunctionTable (myFunctionDesc, myFunctionCode) VALUES ('My Function Desc 99', 'MYCODE99');
        INSERT INTO @myFunctionTable (myFunctionDesc, myFunctionCode) VALUES ('My Function Desc 100', 'MYCODE100');
    END


SELECT 
    MyTableId,
    MyTableOtherColumn,
    . . . 
    (SELECT myFunctionCode FROM MyFunction() WHERE MyFunctionDesc = MyTableDesc1),
    (SELECT myFunctionCode FROM MyFunction() WHERE MyFunctionDesc = MyTableDesc2),
    . . .
    (SELECT myFunctionCode FROM MyFunction() WHERE MyFunctionDesc = MyTableDesc24),
    (SELECT myFunctionCode FROM MyFunction() WHERE MyFunctionDesc = MyTableDesc25),
FROM myTable T
JOIN . . .
WHERE . . .

只需使用条件聚合和外部应用:

SELECT MyTableId, MyTableOtherColumn,
       . . . 
       mf.val1, mv.val2, . . .
FROM myTable T JOIN
     . . . OUTER APPLY
     (SELECT MAX(CASE WHEN MyFunctionDesc = MyTableDesc1 THEN myFunctionCode END) as val1,
             MAX(CASE WHEN MyFunctionDesc = MyTableDesc2 THEN myFunctionCode END) as val2,
             . . .
      FROM MyFunction()
     ) mf
WHERE . . .

我一定会申请的!谢谢你@Gordon!