Iは日付範囲期間(日付と時刻)を使用してデータを追加および更新する方法は?
以下ステージ1
テーブル名のようなテーブルがあります。私は以下のデータ
Date_From Date_To Available
04/03/2011 08/03/2011 4
10/03/2011 18/03/2011 2
でテーブルの上に更新する場合商品
Date_From Date_To Available
01/03/2011 05/03/2011 5
06/03/2011 15/03/2011 6
ステージ2
をステージ3
とき同時に、ステージ2のデータとアップデートが
あなたの助けEDITを願い
Date_From Date_To Available
01/03/2011 03/03/2011 5
04/03/2011 08/03/2011 4
06/03/2011 15/03/2011 6
10/03/2011 18/03/2011 2
私は、このような製品テーブルの出力(第1段階)が必要です:
create table t (dt_from datetime,dt_to datetime, Available int)
insert into t values ('20110301','20110305',5)
insert into t values ('20110306','20110315',6)
実行トリガーが作成された後
--insert into t values ('20110304','20110308',4)
---insert into t values ('20110310','20110318',2)
SELECT *,ROW_NUMBER() OVER (ORDER BY dt_from) rn FROM t
CREATE TRIGGER my_tr ON t FOR INSERT
AS
UPDATE t SET dt_to=(SELECT TOP 1 DATEADD(d,-1,dt_from) FROM inserted t1 WHERE dt_from
BETWEEN t.dt_from AND t.dt_to AND t.Available<>t1.Available)
WHERE EXISTS (SELECT * FROM inserted t1 WHERE dt_from
BETWEEN t.dt_from AND t.dt_to AND t.Available<>t1.Available)
UPDATE t SET dt_from=(SELECT TOP 1 DATEADD(d,1,dt_to) FROM inserted t1 WHERE dt_to
BETWEEN t.dt_from AND t.dt_to AND t.Available<>t1.Available)
WHERE EXISTS (SELECT * FROM inserted t1 WHERE dt_to
BETWEEN t.dt_from AND t.dt_to AND t.Available<>t1.Available)
コードが正常に動作している上に、私は以下の結果に取得
Date_From Date_To Available
01/03/2011 03/03/2011 5
04/03/2011 08/03/2011 4
09/03/2011 09/03/2011 6
10/03/2011 18/03/2011 2
しかし、唯一私が直面する一つの問題は、
insert into t values ('20110301','20110318',5)
が、それは私は以下のようになる必要がある
正しい結果を得ることではありません
Date_From Date_To Available
01/03/2011 18/03/2011 5
このストアドプロシージャでは
CREATE PROCEDURE dbo.InsertOrUpdateData
@FromDate DATE, @ToDate DATE, @NewAvail INT
AS
IF EXISTS(SELECT * FROM dbo.YourTable
WHERE Date_From = @FromDate AND Date_To = @ToDate)
UPDATE dbo.YourTable
SET Available = Available + @NewAvail
WHERE Date_From = @FromDate AND Date_To = @ToDate
ELSE
INSERT INTO dbo.YourTable(Date_From, Date_To, Availability)
VALUES(@FromDate, @ToDate, @NewAvail)
...
その理由の代わりに2つの新しい行を挿入する置換データでテーブルを更新し、あなたがやろうとしているかを理解するのは難しいですか? –
コード、XML、またはデータサンプルを投稿する場合は、テキストエディタでこれらの行を強調表示し、エディタツールバーの "コードサンプル"ボタン( '{}')をクリックして、フォーマットをして構文を強調してください! –
私は新しいデータ(Availaility)でテーブルを更新したいから – user475464