SQL Server Express 2016およびExcel VBAを使用して、さまざまなExcelドキュメントの一意のロット番号を生成しています。現在、新しい行を作成していますが、SQL Serverのスクリプトはロット番号をインクリメントします。次に、select文を実行して、作成したばかりの行からフィールドを取得します。これまでのところ問題はありませんでしたが、Excelファイルが同時に複数のユーザーによって実行された場合、あるユーザーの選択クエリが別のユーザーが作成した行を取得する可能性があります。これは心配ですか?もしそうなら、私はそれをどうやって避けるのですか?SQL Serverの複数のユーザーインクリメント番号フィールドのエラーを回避する方法
statement = "INSERT INTO LotInfo(RefNum,DateCreated,UserName)VALUES('" & RefNum
& "','" & DateCreated & "','" & user & "')"
conn.Execute statement
Set lot = conn.Execute("SELECT top 1 Lot FROM LotInfo Order By ID desc;")
ここでは「RefNum」はユニークではありませんか?とにかく、 '@@ IDENTITY'またはおそらくもっと良いものを返すことができます。' SCOPE_IDENTITY() ' – DavidG
いいえ、残念ながらRefNumは同じRefNumの異なるロットを同時に作ることができるので一意ではありません。私は@@ IDENTITYまたはSCOPE)_IDENTITY()に慣れていませんが、この例では正しい方法は何でしょうか? – Dalton
多くのリソースがありますが、たとえばSELECT SCOPE_IDENTITY()を実行する必要があります。参照してください:http://stackoverflow.com/questions/1920558/what-is-the-difference-between-scope-identity-identity-identity-and-ide – DavidG