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