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.
ABS | DATEDIFF | POWER |
ACOS | DAY | RADIANS |
ASIN | DEGREES | ROUND |
ATAN | EXP | SIGN |
ATN2 | FLOOR | SIN |
CEILING | ISNULL | SQUARE |
COALESCE | ISNUMERIC | SQRT |
COS | LOG | TAN |
COT | LOG10 | YEAR |
DATALENGTH | MONTH | |
DATEADD | NULLIF |
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 datetime, smalldatetimeou 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
@@CONNECTIONS | GETDATE |
@@CPU_BUSY | GETUTCDATE |
@@DBTS | GET_TRANSMISSION_STATUS |
@@IDLE | LAG |
@@IO_BUSY | LAST_VALUE |
@@MAX_CONNECTIONS | LEAD |
@@PACK_RECEIVED | MIN_ACTIVE_ROWVERSION |
@@PACK_SENT | NEWID |
@@PACKET_ERRORS | NEWSEQUENTIALID |
@@TIMETICKS | NEXT VALUE FOR |
@@TOTAL_ERRORS | NTILE |
@@TOTAL_READ | PARSENAME |
@@TOTAL_WRITE | PERCENTILE_CONT |
AT TIME ZONE | PERCENTILE_DISC |
CUME_DIST | PERCENT_RANK |
CURRENT_TIMESTAMP | RAND |
DENSE_RANK | RANK |
FIRST_VALUE | ROW_NUMBER |
FORMAT | TEXTPTR |
Nenhum comentário:
Postar um comentário