私のWebアプリケーションは、同じ時間に次のレコードをフェッチすると約300人のユーザーがいます。各ユーザーが異なるレコードを持つようにMSSQL 2012を使用して同時に各ユーザーごとに異なるレコードを選択
また、フェッチされたレコードはフェッチされたものとしてマークして、次のフェッチロットでは考慮しないでください。
次のクエリが私に役立つかどうかわかりません。
SELECT TOP 1 * FROM [Table_name] ORDER BY NEWID();
私のWebアプリケーションは、同じ時間に次のレコードをフェッチすると約300人のユーザーがいます。各ユーザーが異なるレコードを持つようにMSSQL 2012を使用して同時に各ユーザーごとに異なるレコードを選択
また、フェッチされたレコードはフェッチされたものとしてマークして、次のフェッチロットでは考慮しないでください。
次のクエリが私に役立つかどうかわかりません。
SELECT TOP 1 * FROM [Table_name] ORDER BY NEWID();
あなたはORDER BY
何かする必要はありません - SQLエンジンは、(たとえば、インデックスを使用して)それ自体で行で注文するだろう - ちょうどTOP 1
を使用して:あなたは全体のステートメントをラップすることができます
BEGIN TRAN;
DECLARE @TableId INT;
Select top 1 @TableId = TableId
from MyTable
where Fetched=0;
Update myTable
set Fetched=1
WHERE TableId = @TableId;
COMMIT TRAN;
SELECT *
FROM myTable
WHERE TableId = @TableId;
データベースのレベルをisolationにチェックしてください。ストアドプロシージャの分離レベルも変更できます。
'フェッチされたMyTableからトップ1 *を選択= newid()'によって順序付けして、すでにフェッチされたレコードが表示されないようにします。そして、フェッチされたレコードをフェッチされたものとしてマークする必要があります。 'update myTable set Fetched = 1' – trailmax
返信ありがとうございます。私は – Swapnil
を試してみます。あなたが作業しているレコードのIDを指定する必要があります。現在、このステートメントはテーブル内のすべてのレコードを 'fetched = 1'で更新します。 – trailmax