quinta-feira, 9 de novembro de 2017

Funções determinísticas e não determinísticas - SQL Server

          As funções determinísticas sempre retornam o mesmo resultado quando são chamadas com o uso de um conjunto específico de valores de entrada e quando recebem o mesmo estado do banco de dados. 
          As funções não determinísticas podem retornar resultados diferentes cada vez que são chamadas com um conjunto específico de valores de entrada, mesmo que o estado do banco de dados que elas acessam permaneça o mesmo. Por exemplo, a função AVG sempre retorna o mesmo resultado, dadas as qualificações declaradas acima, mas a função GETDATE, que retorna o valor datetime atual, sempre retorna um resultado diferente. Este tópico identifica o determinismo de funções de sistema internas e o efeito da propriedade determinística de funções definidas pelo usuário.

Determinismo de função interna

Você não pode influenciar o determinismo de nenhuma função interna. Cada função interna é determinística ou não determinística com base no modo como a função é implementada peloSQL Server. Por exemplo, a especificação de uma cláusula ORDER BY em uma consulta não altera o determinismo de uma função usada nessa consulta.

As seguintes funções internas pertencentes a categorias de funções internas que sempre são determinísticas.
ABSDATEDIFFPOWER
ACOSDAYRADIANS
ASINDEGREESROUND
ATANEXPSIGN
ATN2FLOORSIN
CEILINGISNULLSQUARE
COALESCEISNUMERICSQRT
COSLOGTAN
COTLOG10YEAR
DATALENGTHMONTH
DATEADDNULLIF

As funções a seguir nem sempre são determinísticas, mas podem ser usadas em exibições indexadas ou índices em colunas computadas quando são especificadas de uma maneira determinística.

Todas as funções de agregação: Todas as funções de agregação são determinísticas, a menos que sejam especificadas com as cláusulas OVER e ORDER BY. 
CAST Determinística a menos que usado com datetimesmalldatetimeou sql_variant.
CHECKSUM Determinístico, com a exceção de CHECKSUM().
ISDATE Determinístico somente se usado com a função CONVERT, o parâmetro de estilo CONVERT é especificado e o estilo não é igual a 0, 100, 9 ou 109.
RAND RAND só é determinística quando um parâmetro seed é especificado.
CONVERT  Determinística, a menos que um destas condições exista:
O tipo é sql_variant. O tipo de destino é sql_variant e seu tipo de origem é não determinístico.
O tipo de origem ou de destino é datetime ou smalldatetime, o outro tipo de origem ou destino é uma cadeia de caracteres, e um estilo não determinístico é especificado. Para ser determinístico, o parâmetro de estilo deve ser uma constante. Além disso, estilos menores ou iguais a 100 são não determinísticos, com exceção dos estilos 20 e 21. Estilos maiores que 100 são determinísticos, com exceção dos estilos 106, 107, 109 e 113.

Todas as funções estatísticas de configuração, cursor, metadados, segurança e sistema são não determinísticas. As funções a seguir nunca são determinísticas
@@CONNECTIONSGETDATE
@@CPU_BUSYGETUTCDATE
@@DBTSGET_TRANSMISSION_STATUS
@@IDLELAG
@@IO_BUSYLAST_VALUE
@@MAX_CONNECTIONSLEAD
@@PACK_RECEIVEDMIN_ACTIVE_ROWVERSION
@@PACK_SENTNEWID
@@PACKET_ERRORSNEWSEQUENTIALID
@@TIMETICKSNEXT VALUE FOR
@@TOTAL_ERRORSNTILE
@@TOTAL_READPARSENAME
@@TOTAL_WRITEPERCENTILE_CONT
AT TIME ZONEPERCENTILE_DISC
CUME_DISTPERCENT_RANK
CURRENT_TIMESTAMPRAND
DENSE_RANKRANK
FIRST_VALUEROW_NUMBER
FORMATTEXTPTR

Nenhum comentário:

Postar um comentário