実現したいこと
クエリの実行結果(INSERT,UPDATE)のどちらを行ったのか取得して、
INSERTを行った場合は別の処理を走らせたい。
MERGE文がどちらの処理を行ったか戻り値を取得する方法を教えて頂けないでしょうか?
前提
- VB.netを使用しています
- SQL SERVER 2019を使用しています
- テーブルのレコードが存在すればUPDATE
- テーブルにレコードが存在しなければINSERT
- MERGEの戻り値を取得して別の処理を走らせる
該当のソースコード
Dim Query As String = String.Empty Dim DBfactry As DbProviderFactory = DbProviderFactories.GetFactory(My.Settings.データプロバイダ名) Dim DBtrn As DbTransaction Dim cn As DbConnection = DBfactry.CreateConnection cn.ConnectionString = My.Settings.データ接続文字 Dim DBcmd As DbCommand = cn.CreateCommand DBcmd.Connection = cn '接続 cn.Open() DBtrn = cn.BeginTransaction Try DBcmd.Transaction = DBtrn For i = 0 To DataGridView.Rows.Count - 2 Query = "With InsertData as (" Query += " SELECT @年月 年月,@行No 行No,@商品コード 商品コード,@商品名 商品名,@規格 規格,@産地コード 産地コード,@荷姿コード 荷姿コード,@入数 入数,@数量 数量,@単価 単価,@金額 金額,@担当者コード 担当者コード" Query += " )" Query += " MERGE Table_A AS TargetData " Query += " Using InsertData" Query += " ON TargetData.Tana_nentuki = InsertData.年月 AND TargetData.Item_CD = InsertData.商品コード AND TargetData.Item_Name = InsertData.商品名" Query += " AND TargetData.Standard = InsertData.規格 AND TargetData.Producing_area_CD = InsertData.産地コード AND TargetData.Unit_CD = InsertData.荷姿コード AND TargetData.In_Quantity = InsertData.入数" Query += " WHEN MATCHED " Query += " THEN UPDATE SET Quantity=@数量,Unit_Price=@単価,Price=@金額" Query += " WHEN NOT MATCHED BY TARGET " Query += " THEN INSERT (Tana_nentuki,Line_No,Item_CD,Item_Name,Standard,Producing_area_CD,Unit_CD,In_Quantity,Quantity,Unit_Price,Price,employeecd)" Query += " VALUES (InsertData.年月,InsertData.行No, InsertData.商品コード, InsertData.商品名, InsertData.規格, InsertData.産地コード, InsertData.荷姿コード, InsertData.入数, InsertData.数量, InsertData.単価, InsertData.金額, InsertData.担当者コード)" Query += " OUTPUT $action AS RESULT_STRING; " DBcmd.Parameters.Clear() DBcmd.Parameters.Add(New SqlParameter("@年月", gdt_売上日.Text)) DBcmd.Parameters.Add(New SqlParameter("@行No", i)) DBcmd.Parameters.Add(New SqlParameter("@商品コード", DataGridView(clm_商品コード.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@商品名", DataGridView(clm_商品名.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@規格", DataGridView(clm_規格.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@産地コード", DataGridView(clm_産地コード.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@荷姿コード", DataGridView(clm_荷姿コード.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@入数", DataGridView(clm_入数.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@数量", DataGridView(clm_数量.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@単価", DataGridView(clm_単価.Index, i).Value)) DBcmd.Parameters.Add(New SqlParameter("@金額", DataGridView(clm_金額.Index, i).Value)) 'コマンドの実行 DBcmd.CommandText = Query DBcmd.ExecuteNonQuery() If DBcmd.ExecuteScalar().ToString().IndexOf("INSERT") >= 0 Then '別の処理を走らせる End If Next
試したこと
以下のロジックで戻り値を取得できるかと期待したのですが、"UPDATE"しか返ってきません。
If DBcmd.ExecuteScalar().ToString().IndexOf("INSERT") > 0 Then '別の処理を走らせる End If
よろしくお願いいたします。

回答1件
あなたの回答
tips
プレビュー