Aqui está o cenário. Eu tenho um SQL Server local para o qual restaurei os bancos de dados ativos do SQL Server. Para ser compatível com GDPR/CCPA, devo anonimizar as PII nos bancos de dados do servidor local. Eu tenho um script para fazer isso, e tem funcionado muito bem quando o servidor local é 2008 R2 ou 2017. Mas acabei de instalar 2019 e o mesmo script coloca o mesmo valor em todas as linhas da tabela, em vez de um valor diferente para cada linha. É como se a função fosse executada apenas uma vez, então esse valor é usado na UPDATE
instrução. Talvez seja algum tipo de otimização que 2019 está fazendo? Aqui está um trecho do script.
UPDATE Guest SET GuestFirstName=Utility.dbo.RANDWORD() WHERE GuestFirstName IS NOT NULL;
RANDWORD
pega uma palavra aleatória de uma tabela contendo aproximadamente 100.000 palavras em inglês.
Suspeito que isso seja por causa de um novo recurso do SQL 2019, inlining UDF escalar :
Isso pode ser um benefício de desempenho, mas no seu caso parece estar processando a função apenas uma vez e, em seguida, aplicando o mesmo resultado a todas as linhas.
A parte inferior do artigo vinculado descreve várias maneiras de desabilitar a inserção de UDF escalar.
Você pode desativá-lo banco de dados por banco de dados:
Ou force esta opção consulta por consulta, usando uma dica:
Ou você pode desativá-lo alterando o próprio UDF: