BETA

InsertされたレコードをSelectする

投稿日:2019-11-30
最終更新:2019-11-30

主キーにauto_incrementが指定してあるテーブルに
insertした後、そのinsertした行のauto_incrementがされている値が欲しい場合、
Insertした直後にすぐにselect文でmax()や@@identifyを使って持ってくる方法がありますが、

複数からの同時実行などを考慮すると少し不安なものがありますよね、、、

色々試行錯誤して、ある記事
を参考にしてその解決方法を見つけました。

「Insert文にて"OUTPUT句"を使い、挿入した行の特定の値を抽出する」方法です。

id(Primary/auto_increment) name remarks
1 test1-1 test1-2
2 test2-1 test2-2
3 test3-1 test3-2

※ transactionによる処理(複数人からの同時実行考慮/主キーautoincrement時)

Private Function insertAndSelect() As Integer  
    Dim conn As SqlConnection  
    Dim cmd As New SqlCommand  
    Dim tran As SqlTransaction  
    DIm result As Integer = -1  

    Const INSERT_STATEMENTS =   
        "INSERT INTO tbl(name, remarks)" & _  
            ' OUTPUT句で挿入した行のidを返す  
            "OUTPUT inserted.id" & _  
                "VALUE('test4-1', 'test4-2')"  
    Try  
        cmd.Connection = con  
        cmd.CommandType = cmd.CommandType ' 謎  
        tran = conn.BeginTransaction()  
        cmd.Transaction = tran   
        cmd.CommandText = INSERT_STATEMENT  
        ' 返り値を一つだけ返す  
        result = CInt(cmd.ExecuteScalar())  
        tran.Commit()  
    Catch ex As Exception  
        Try  
            tran.Rollback()  
        End Try  
    End Try  
    return result  
End Function  
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
駆け出しエンジニアからエキスパートまで全ての方々のアウトプットを歓迎しております!
or 外部アカウントで 登録 / ログイン する
クランチについてもっと詳しく

この記事が掲載されているブログ

@MewW6mの技術ブログ

よく一緒に読まれる記事

0件のコメント

ブログ開設 or ログイン してコメントを送ってみよう
目次をみる
技術ブログをはじめよう Qrunch(クランチ)は、プログラマの技術アプトプットに特化したブログサービスです
or 外部アカウントではじめる
10秒で技術ブログが作れます!