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 に答える