Recentemente, descobri que o SQL Server 2005 não permite o uso de newid()
funções definidas pelo usuário. Por que é isso?
Eu tenho uma solução alternativa que atende às minhas necessidades, então não estou procurando maneiras de contornar isso. Estou curioso para saber por que os designers tomariam essa decisão.
O SQL Server permite apenas que funções determinísticas sejam usadas em funções definidas pelo usuário. Como o valor de NEWID() não é determinístico, ele não pode ser usado. Você descobrirá que a mesma coisa é verdadeira com GETDATE() e qualquer outra função não determinística.
Não estou qualificado para responder por que eles tomariam essa decisão. Isso também me irrita, mas tenho certeza de que a equipe SQL da MS não é desleixada.
EDIT: Acontece que meu conhecimento sobre GETDATE () está desatualizado. Como diz o comentarista, você pode usar GETDATE() nas funções do SQL Server 2005 em diante. No entanto, você ainda não pode usar NEWID (), que acredito ter a ver com a mesma restrição de não determinismo.
A documentação NEWID () da Microsoft não explica, mas concordo que o motivo provável está relacionado ao comentário de @Payload em outra resposta :
Para aqueles dispostos a arriscar, veja a solução alternativa de @dio-phung sugerida em outro comentário na mesma resposta :
Observe o cuidado de @david-spillett:
Essa solução alternativa/truque é oferecida em várias outras respostas .
Acredito que a resposta é que NEWID() é uma função não determinística - ou seja, tem efeitos colaterais. As funções definidas pelo usuário não podem ter efeitos colaterais.