J'ai une question sur la raison pour laquelle la sortie de ces deux requêtes diffère. Je me serais attendu à ce qu'ils travaillent de la même manière.SqlServer Génération de données aléatoires Observation
Requête 1:
declare @cache table(originalValue nvarchar(255), obfuscateValue nvarchar(255));
declare @table1 table(c char(1));
declare @i1 int;
set @i1 = ASCII('0');
while @i1 <= ASCII('9')
begin
insert into @table1 (c)
select (CHAR(@i1))
set @i1 = @i1 +1;
end
insert into @cache (originalValue, obfuscateValue)
select [firstname],
(select top 1 c from @table1 order by NEWID()) +
(select top 1 c from @table1 order by NEWID())
from Customer
where [firstname] is not null
select * from @cache;
Requête 2:
declare @cache table(originalValue nvarchar(255), obfuscateValue nvarchar(255));
declare @table1 table(c char(1));
declare @i1 int;
set @i1 = ASCII('0');
while @i1 <= ASCII('9')
begin
insert into @table1 (c)
select (CHAR(@i1))
set @i1 = @i1 +1;
end
insert into @cache (originalValue)
select [firstname]
from Customer
where [firstname] is not null
update c
set c.obfuscateValue = t.Value
from @cache c
join
(
select originalValue,
(
(select top 1 c from @table1 order by NEWID()) +
(select top 1 c from @table1 order by NEWID())
) as Value
from @cache
) t on t.originalValue = c.originalValue
select * from @cache;
Ils devraient faire les mêmes, mais les premiers retours de la requête les résultats suivants:
Jonathon 73
Everett 73
Janet 73
Andy 73
Shauna 73
et deuxième :Comme vous l'avez remarqué, la deuxième colonne du deuxième résultat a des valeurs différentes, alors que les mêmes premières valeurs.
Il ressemble à la première requête est appelée une seule fois la
(select top 1 c from @table1 order by NEWID()) +
(select top 1 c from @table1 order by NEWID())
.
Quelqu'un peut-il expliquer ce mystère?
Probablement cela explique quelque chose http://stackoverflow.com/questions/1468159/how-can-i-insert-random-values-into-a-sql-server-table –
Essayez-vous simplement de générer un nombre entre 00 et 99? Ou autre chose? – gbn
Non, c'est un exemple. Cela devrait fonctionner pour n'importe quelle stratégie, par exemple 000-999999. –