0

私はプログラミングの世界では初心者なので、私の無知を許してください。

挿入したばかりの行の主キー値を取得したい。主キーの値は自動的に生成されます。その主キーの値を外部キーとして別のテーブルに挿入したいと考えています。

これは、最初のテーブルにデータを挿入するコードです

Core.DB.DoQuery("insert into survey(id, title, detail, employerid, userid) values(@id, @title, @detail, @eid, @uid);", 
                Core.DB.SIP("title", surveyTitle.Text), 
                Core.DB.SIP("detail", surveyDetail.Text), 
                Core.DB.SIP("eid", LocalHelper.UserEmployerID()), 
                Core.DB.SIP("uid", LocalHelper.UserID()), 
                Core.DB.SIP("id", survey))

どこDoQueryですか

Shared Sub DoQuery(ByVal commandText As String, ByVal ParamArray params As SqlParameter())
        Dim conn As SqlConnection = Nothing

        Try
            conn = GetOpenSqlConnection()
            DoQuery(conn, commandText, params)
        Finally
            If conn IsNot Nothing Then conn.Dispose()
        End Try
    End Sub

上記のコードでは、主キーである id が自動的に生成されます。surveyidその値を取得して、2番目のテーブルに挿入したいと思います。

Core.DB.DoQuery("insert into surveyquestioncategory(title, detail, surveyid) values(@title, @detail, @sid)", 
                Core.DB.SIP("title", categoryTitle.Text), 
                Core.DB.SIP("detail", categoryDetail.Text), 
                Core.DB.SIP("sid", Survey.ID))

そして、2番目のテーブルのIDを取得して、3番目のテーブルに値を挿入します。

最近挿入された行の id 値を取得するには、次を使用できます

Core.DB.DoQuery("SELECT SCOPE_IDENTITY() AS MostRecentID")           

これは Web アプリケーションであり、複数のユーザーが同時にアプリケーションを使用しているためSCOPE_IDENTITY()、間違った行の値を返す可能性があります。もしそうなら、どうすればそれを避けることができますか?

プログラミングについての私の無知を許してください。

あなたの助けに感謝。

ありがとうバシャビ

4

1 に答える 1

1

ステートメントを使用OUTPUTすると、1 つのクエリで実行したり、このためのプロシージャを作成したりできます

INSERT INTO survey (id, title, detail, employerid, userid) 
OUTPUT @title, @detail, inserted.ID INTO surveyquestioncategory (title, detail, surveyid)
VALUES (@id, @title, @detail, @eid, @uid);

MSDN OUTPUT 句から (Transact-SQL)

于 2015-07-29T15:08:38.433 に答える