目前我必须更改视图,视图代码的很大一部分如下所示:
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世界。但是必须有一个解决方案来避免代码复制并避免在数据库中有数百个辅助函数吗?
在这种情况下,最佳做法是什么?
答案 0 :(得分:2)
最佳做法可能是创建user defined function。
参数将是更改的字段,它将返回预期的值。
答案 1 :(得分: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
答案 2 :(得分: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