Comment générer des nombres uniques dans un file UDF (SQL Server)

Existe-t-il un moyen de générer des nombres uniques (int par exemple) dans une fonction définie par l'user?

rand () et newid () ne fonctionnent pas en raison d'effets secondaires.

Merci.

CRYPT_GEN_RANDOM contourne la limitation NEWID ()

SELECT CHECKSUM(CRYPT_GEN_RANDOM(8000)) 

Donc vous pouvez l'utiliser comme ça. Aucune erreur "affectant le côté"

 CREATE FUNCTION dbo.test () RETURNS int AS BEGIN RETURN CHECKSUM(CRYPT_GEN_RANDOM(8000)) END GO SELECT dbo.test() 

Dans DB2, j'utilise la partie microsecondes de l'horodatage, mais le server SQL ne passe qu'en millisecondes. Je suppose que ce ne serait pas suffisant?

affichant une solution de contournement conviviale que j'ai utilisée. J'ai écrit un proc standalone pour returnner un int random en utilisant la méthode NewId

 CREATE PROCEDURE sp_RandUpTo @max int AS BEGIN declare @return int SET NOCOUNT ON; SELECT @return = abs(checksum(newid())) % (@max) return @return END 

puis exécutez le proc dans la variable désirée au sein de votre FDU

 declare @OptionSelect int, @OptionMax int = 100 exec @OptionSelect = spRandUpTo @OptionMax 

Vous pouvez également définir une vue en utilisant la fonction qui provoque l'effet secondaire (dans ce cas, RAND ())

 CREATE VIEW randomView AS SELECT RAND() randomResult GO 

Ensuite, utilisez la vue dans votre FDU

 DECLARE @random DECIMAL(18,18) SELECT @random = randomResult FROM randomView RETURN @random