안녕하세요.
특정 코드를 클라이언트에 NEWID를 통해서 무작위로 중복 없이 보내줘야 하는데
코드가 클라이언트를 초과해서 DB에 존재 하면 NEWID 실행 시 게속 중복이 나옵니다.
예를 들어서 10개의 무작위값을 클라이언트로 보내야 하는데 클라이언트 유저가 20명이나 30명이 초과 하면 중복이 40%가 넘습니다.
CODE라는 테이블에 가져가야 하는 코드가 등록이 되어있고 SELECT 된 코드는 CODE_USED에 INSERT를 시켜서 UID를 통해서 NOT IN을 판단 하게끔 해놨는데 효과가 없네요 ㅠㅠ
SELECT TOP(1) * FROM CODE WHERE UID NOT IN (SELECT UID FROM CODE_USED) ORDER BY newid()
위 SQL문을 사용하고 있습니다.
혹시 몰라서 INSERT되는 시간대나 SELECT되는 시간대를 전부 다르게 주었음에도 불과하고 문제가 생기네요 ㅠㅠ
이것에 대한 해결책이나 NEWID를 대체할수 잇는 다른 함수가 있을까요?
전문가 분들의 답변 기대합니다 ㅠㅠ
begin tran 으로 묶어 주시면 되지 않을까요...
BEGIN TRAN ;
BEGIN TRY
INSERT CODE_USED
SELECT TOP(1) * FROM CODE WHERE UID NOT IN (SELECT UID FROM CODE_USED) ORDER BY newid()
END TRY
BEGIN CATCH
COMMIT TRAN ;
RETURN