2016-04-04 4 views
1

SQL ServerでLibraryTtableを3つのランダムな値で更新するにはどうすればいいですか?テーブルを2つのランダムな値で更新するには、チェックインして日付/列をチェックアウトする

ライブラリシステムは、3要因チェックアウトに基づいて、罰金を計算してい期間(図書30日、雑誌7日)許可され、最後に日付をチェックイン。

私はこれを行うことができます>もともとDuration許可(7〜30とすることができます)

UPDATE [dbo].LibraryTtable 
SET Check-Out = DATEADD(DAY, ABS(CHECKSUM(NEWID()) % 370), '2015-02-01') 
- まず

のCol1 - >Check-in DateとCOL3 - その後、ランダムNEWID()) % 30日col2に基づいて>Check-Out Date

しかし、それを一時変数に保持し、チェックイン日に30日以内にランダムな範囲を追加するには

ランダムに値を取得することはできますが、 thを使用するem。

+1

? –

+0

@ GordonLinoff私は自己が同じテーブルを参照して値を保持する方法を知らない...私はC#から来て、私はforeachループが表示されないので..私は行を歩くと行の値。 – transformer

答えて

0

私はUPDATEという質問をCTE経由で書いています。

サンプルデータ

DECLARE @LibraryTable TABLE (CheckOut date, CheckIn date, AllowedDuration int, ActualDuration int); 

INSERT INTO @LibraryTable (CheckOut, CheckIn, AllowedDuration, ActualDuration) VALUES 
(GETDATE(), GETDATE(), 30, 0), 
(GETDATE(), GETDATE(), 30, 0), 
(GETDATE(), GETDATE(), 30, 0), 
(GETDATE(), GETDATE(), 30, 0), 
(GETDATE(), GETDATE(), 30, 0); 

クエリ

WITH 
CTE 
AS 
(
    SELECT 
     CheckOut 
     ,CheckIn 
     ,ActualDuration 
     ,ABS(CHECKSUM(NEWID())) % 370 AS RandomNumber370 
     ,ABS(CHECKSUM(NEWID())) % 30 AS RandomNumber30 
    FROM @LibraryTable 
) 
UPDATE CTE 
SET 
    CheckOut = DATEADD(day, RandomNumber370, '2015-02-01') 
    ,CheckIn = DATEADD(day, RandomNumber370 + RandomNumber30, '2015-02-01') 
    ,ActualDuration = RandomNumber30 
; 

結果だけで、複数の `update`のステートメントを使用しないのはなぜ

SELECT * 
FROM @LibraryTable; 


+------------+------------+-----------------+----------------+ 
| CheckOut | CheckIn | AllowedDuration | ActualDuration | 
+------------+------------+-----------------+----------------+ 
| 2015-09-07 | 2015-09-10 |    30 |    3 | 
| 2015-11-25 | 2015-12-16 |    30 |    21 | 
| 2015-06-16 | 2015-06-24 |    30 |    8 | 
| 2015-11-25 | 2015-12-07 |    30 |    12 | 
| 2015-03-25 | 2015-03-29 |    30 |    4 | 
+------------+------------+-----------------+----------------+ 
+0

多くのありがとう、あなたは理解し、よく説明しました...他のスレッドクラッパーのいくつかよりも優れています:) – transformer

+0

@transformer、あなたは大歓迎です。私の答えは役に立つとうれしいです。 –

関連する問題