「ユーザー名」を含む2つのテーブルとtable1
、曜日ごとの値を含むさらに7つの列があります。には、「ユーザー名」、「日付」、および挿入された行の日付に対応する「曜日」列にtable2
等しく設定したい3番目の列が含まれています。table1
2 番目のテーブルは、毎日すべてのユーザーの新しい行で更新されます。
[それが理にかなっていることを願っています!]
もともと、曜日に等しい値を返す関数を呼び出す計算列を使用する可能性を検討していました。
[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
。
これを達成する方法についての提案を探しています。
前もって感謝します!