0

「ユーザー名」を含む2つのテーブルとtable1、曜日ごとの値を含むさらに7つの列があります。には、「ユーザー名」、「日付」、および挿入された行の日付に対応する「曜日」列にtable2等しく設定したい3番目の列が含まれています。table12 番目のテーブルは、毎日すべてのユーザーの新しい行で更新されます。

[それが理にかなっていることを願っています!]

もともと、曜日に等しい値を返す関数を呼び出す計算列を使用する可能性を検討していました。

[dbo].[functionName]
(
    @colUsername varchar(25),
    @colDate date
)
RETURNS numeric(18, 0)
AS
BEGIN
    DECLARE @result numeric(18, 0)


    SELECT @result = CASE DATEPART(dw, @colDate)
        WHEN 1 THEN (SELECT SUNDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
        WHEN 2 THEN (SELECT MONDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
        WHEN 3 THEN (SELECT TUESDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
        WHEN 4 THEN (SELECT WEDNESDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
        WHEN 5 THEN (SELECT THURSDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
        WHEN 6 THEN (SELECT FRIDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
        WHEN 7 THEN (SELECT WORKINGSATURDAY FROM dbo.table1 WHERE USERNAME = @colUsername)
    END


    RETURN @result
END

そして、次のように計算列として設定されました。

ALTER TABLE dbo.table2 ADD
    COLNAME AS dbo.functionName(USERNAME, DATE)
GO

これは正常に機能し、期待どおりに機能しますが、計算列であるため、値がtable1変更されると、すべての値も更新されますtable2が、古い値は静的なままにしておく必要があり、更新されたtable1値は追加されるだけですの新しい行table2

これを達成する方法についての提案を探しています。

前もって感謝します!

4

1 に答える 1