C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

アップデート方法について

[トピック内 3 記事 (1 - 3 表示)]  << 0 >>

■91753 / inTopicNo.1)  アップデート方法について
  
□投稿者/ 韋駄天 (11回)-(2019/07/30(Tue) 15:08:24)

分類:[.NET 全般] 

以下のようなデータがある場合に
NAME PNUM WNUM CNUM CWNUM
AAA 0 1 2 0
BBB 0 1 1 0

以下のように変更します。
NAME PNUM WNUM CNUM CWNUM
AAA 0 1 2 1
BBB 1 1 1 1

処理はSQLServer を使用していて

1.CWNUM = CWNUM + 1
2.CWNUM >= CNUM であれば PNUM=WNUM

以上お願いします。

引用返信 編集キー/
■91754 / inTopicNo.2)  Re[1]: アップデート方法について
□投稿者/ 魔界の仮面弁士 (2265回)-(2019/07/30(Tue) 15:33:06)
2019/07/30(Tue) 15:48:54 編集(投稿者)

No91753 (韋駄天 さん) に返信
> 以下のようなデータがある場合に

SQL Server の質問のように見えますが、
分類:[データベース全般]ではなく、
分類:[.NET 全般]になっていますね。
クライアントサイド処理の質問という事でしょうか?


> 以上お願いします。

仕様が書かれているだけで、
肝心の質問内容が何も書かれていないんですが…。


とりあえず【Transact-SQL で行いたい】なら、たとえばこんな感じ。

-- 1 の UPDATE を無条件で投げる
UPDATE 対象 SET CWNUM = CWNUM + 1;
-- 2 の UPDATE を条件指定で投げる
UPDATE 対象 SET PNUM=WNUM WHERE CWNUM >= CNUM;


【OR マッパー等で IEnumerable<> か何かに保持されている場合】はこんな感じ。

// C#
foreach (var rec in records) {
 if (rec.CNUM <= ++rec.CWNUM) {
   rec.PNUM = rec.WNUM;
 }
}


【DataTable に保持されている場合】だとこうかな。

' Visual Basic ( Option Strict Off )
For Each row In dt.AsEnumerable()
  row!CWNUM += 1
  If CInt(row!CWNUM) >= CInt(row!CNUM) Then
    row!PNUM = row!WNUM
  End If
Next
引用返信 編集キー/
■91755 / inTopicNo.3)  Re[2]: アップデート方法について
□投稿者/ 韋駄天 (12回)-(2019/07/30(Tue) 16:55:16)
No91754 (魔界の仮面弁士 さん) に返信

ごめんなさい。
質問したいことが文章化できませんでした。
質問をわかりやすくしてからまた質問します。

解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ