각 호출마다 단일 임의 번호를 얻어야하는 프로 시저를 작성하고 있습니다. 이 절차는 .net 웹 서비스에서 호출됩니다.SqlServer Rand() 질문
저는 이것을 rand()를 사용하여 구현하려고했습니다. 그러나 밀리 초 내에 저장 프로 시저를 여러 번 호출하면 동일한 임의의 숫자가 생성된다는 점에서 많은 충돌이 발생합니다. 후속 호출 사이에 약 20 또는 30 밀리 초의 공간이 있으면 제대로 작동하는 것 같습니다.
rand()가 SqlServer에 의해 저장된 프로 시저 호출마다 다시 시드 된 것처럼 보입니다. 내가 이해할 수있는 한 것은 난수 생성기를 한 번 시드해야하고 하나가 rand에 대한 각 호출을 다시 시드하는 경우 의사 난수 시퀀스의 좋은 시퀀스를 얻지 못하기 때문에 이것이 문제라는 것입니다. 또한 1 ~ 2 밀리 초 내에있는 동일한 sp에 대한 호출은 동일한 값으로 시드됩니다.
다음은 저장 프로 시저의 문입니다.
DECLARE @randomNumber char(9)
SET @randomNumber = RIGHT('00000' + CAST(CAST(rand()*100000 AS INT) AS VARCHAR(5)),5)
+ RIGHT('00000' + CAST(CAST(rand()*10000 AS INT) AS VARCHAR(4)),4)
아무에게도이 문제를 해결하기위한 제안이 있습니까?
한 번 시드 된 임의의 번호 생성기를 작성해야하며 전화를 통해 테이블에 상태를 저장해야합니까? SQL Server는 rand()를 어떻게 시드합니까? 정말 무작위입니까, 아니면 별도의 연결에서 서로 1 ~ 2 밀리 초 내에 sp를 호출해도 충돌을 일으키는 동일한 시드가 포함될 것입니까? 당신의 예에서
CLR 저장 프로 시저를 작성하고 .NET Framework의 난수 기능을 사용하려고 시도 했습니까? – Kuberchaun