1

目前我必须更改视图,视图代码的很大一部分如下所示:

CAST('My_Tag_' + CASE 
        WHEN FieldX isnull
            THEN ''
        WHEN FieldX = '123'
            THEN 'some_number'
        WHEN FieldX = 'abc'
            THEN 'some_text'
        ELSE 'strange' ) AS VARCHAR(128) AS myField
)

只是一段代码,将一个字符串组合在一起(代码本身现在甚至不重要,我有 50 个其他示例,其中我有很多代码复制)。现在,我在视图中为另外 30 个字段提供了完全相同的代码,只是“My_Tag_”和 FieldX 正在发生变化。如果这将是 C#,我将只编写一个小辅助函数。当然我也可以在这里写一个函数。但由于这是一个更大的项目,有很多表、视图等,我很快就会有数百个函数。

现在我对 SQL 很陌生,通常我的家是 OOP 世界。但是必须有一个解决方案来避免代码复制并避免在数据库中有数百个帮助函数?

在这种情况下,最佳做法是什么?

4

3 回答 3

2

最佳实践可能是创建一个用户定义的函数

参数将是更改的字段,它将返回预期值。

于 2011-12-21T09:25:10.280 回答
1

您可以使用 CTE 向表中添加字段:

; with  TableWithExtraField as
        (
        select  case ... end as NewField
        ,       table1
        )
select   NewField
from     TableWithExtraField

或者子查询也可以:

select  NewField
from    (
        select  case ... end as NewField
        ,       table1
        ) as TableWithExtraField
于 2011-12-21T09:30:01.627 回答
1
CREATE FUNCTION dbo.MyTag(@myfield VARCHAR(MAX))
RETURNS VARCHAR(128)
AS
BEGIN
    RETURN CAST('My_Tag_' + CASE 
        WHEN @myfield IS NULL 
            THEN ''
        WHEN @myfield = '123'
            THEN 'some_number'
        WHEN @myfield = 'abc'
            THEN 'some_text'
        ELSE 'strange' END AS VARCHAR(128)) 
)
END
于 2011-12-21T09:33:55.040 回答