Funções (Mecanismo de Banco de Dados)

SQL Server fornece funções internas que podem ser usadas para executar determinadas operações.

As funções podem ser usadas ou incluídas no seguinte:

  • A lista de seleção de uma consulta que usa uma instrução SELECT para retornar um valor.

    SELECT DB_NAME();
    GO
    
  • Uma condição de pesquisa de cláusula WHERE de uma instrução SELECT ou de modificação de dados (SELECT, INSERT, DELETE ou UPDATE) para limitar as linhas que qualificam a consulta.

    USE AdventureWorks;
    GO
    SELECT SalesOrderID, ProductID, OrderQty
    FROM Sales.SalesOrderDetail
    WHERE OrderQty =
       (SELECT MAX(OrderQty) FROM Sales.SalesOrderDetail);
    GO
    
  • A condição de pesquisa, cláusula WHERE, de uma exibição para tornar dinamicamente essa exibição de acordo com o usuário ou ambiente em tempo de execução.

    CREATE VIEW ShowMyEmploymentInfo AS
    SELECT FirstName, LastName
    FROM Person.Contact
    WHERE ContactID = SUSER_SID();
    GO
    
  • Qualquer expressão.

  • Uma restrição CHECK ou gatilho para procurar valores específicos quando os dados são inseridos.

    CREATE TABLE SalesContacts
       (SalesRepID   INT PRIMARY KEY CHECK (SalesRepID = SUSER_SID() ),
       ContactName   VARCHAR(50) NULL,
       ContactPhone   VARCHAR(13) NULL);
    GO
    
  • Uma restrição DEFAULT ou gatilho para fornecer um valor no caso de um não ter sido especificado por INSERT.

    CREATE TABLE SalesContacts
       (
       SalesRepID   INT PRIMARY KEY CHECK (SalesRepID = SUSER_SID() ),
       ContactName   VARCHAR(50) NULL,
       ContactPhone   VARCHAR(13) NULL,
       WhenCreated   DATETIME DEFAULT GETDATE(),
       Creator      INT DEFAULT SUSER_SID()
       );
    GO
    

As funções são especificadas com parênteses mesmo quando não houver parâmetro. As exceções a isso são as funções niladic usadas com a palavra-chave DEFAULT. As funções niladic não obtêm parâmetros. Para obter mais informações sobre a palavra-chave DEFAULT, consulte ALTER TABLE (Transact-SQL) e CREATE TABLE (Transact-SQL).

Os parâmetros para especificar um banco de dados, computador, logon ou usuário de banco de dados às vezes são opcionais. Se eles não forem especificados, o padrão será o banco de dados atual, computador host, logon ou usuário de banco de dados.

As funções podem ser aninhadas.

Categorias de função

A tabela a seguir lista as categorias das funções SQL Server.

Categoria da função

Descrição

Funções agregadas (Transact-SQL)

Executa operações que combinam vários valores em um. Os exemplos são COUNT, SUM, MIN e MAX.

Funções de configuração

Funções escalares que retornam informações sobre definições de configuração.

Funções criptográficas (Transact-SQL)

Oferecem suporte a criptografia, decriptografia, assinatura digital e validação de assinaturas digitais.

Funções de cursor

Retornam informações sobre o status de um cursor.

Funções de data e hora

Altera os valores de data e hora.

Funções matemáticas

Executam operações trigonométricas, geométricas e outras operações numéricas.

Funções de metadados

Retornam informações sobre os atributos de bancos de dados e objetos de banco de dados.

Funções de classificação

Funções não-determinísticas que retornam um valor de classificação para cada linha em uma partição.

Funções de conjunto de linhas (Transact-SQL)

Retornam os conjuntos de linhas que podem ser usados no lugar de uma referência de tabela em uma instrução Transact-SQL.

Funções de segurança

Retornam informações sobre usuários e funções.

Funções de cadeia de caracteres

Alteram valores char, varchar, nchar, nvarchar, binary e varbinary.

Funções de sistema

Operam ou reportam várias opções e objetos no nível do sistema.

Funções estatísticas de sistema (Transact-SQL)

Retornam informações sobre o desempenho de SQL Server.

Funções de texto e imagem

Alteram valores text e image.

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

Em SQL Server, as funções são classificadas como estritamente determinísticas, determinísticas ou não-determinísticas.

Uma função será estritamente determinística se, para um conjunto específico de valores de entrada, a função sempre retornar os mesmos resultados.

Para funções definidas pelo usuário, uma noção menos rígida de determinismo é aplicada. Uma função definida pelo usuário será determinística se, para um conjunto específico de valores de entrada e estado do banco de dados, a função sempre retornar os mesmos resultados. Se a função não for estritamente determinística, ela poderá ser determinística nesse sentido, se ela for de acesso a dados.

Uma função não-determinística pode retornar resultados diferentes quando for chamada repetidamente com o mesmo conjunto de resultados de valores de entrada. Por exemplo, a função GETDATE () é não-determinística. O SQL Server impõe restrições em várias classes de não-determinismo. Portanto, funções não-determinísticas devem ser usadas cuidadosamente.

Para funções internas, determinismo e determinismo estrito são iguais. Para funções definidas pelo usuário Transact-SQL, o sistema verifica a definição e impede a definição de funções não-determinísticas. Entretanto, uma função de acesso a dados ou não associada a esquema não é considerada estritamente determinística. Para as funções CLR (tempo de execução de linguagem comum), as definições de função especificam as propriedades determinísticas, de acesso a dados e de acesso a dados do sistema da função, mas como essas propriedades não são verificadas pelo sistema, as funções são sempre consideradas estritamente determinísticas.

A falta de determinismo de uma função pode limitar onde ela pode ser usada. Apenas funções determinísticas podem ser invocadas em exibições indexadas, colunas computadas indexadas, colunas computadas persistidas ou definições de funções Transact-SQL definidas pelo usuário.

A falta de determinismo estrito de uma função pode bloquear valiosas otimizações de desempenho. Determinadas etapas de reordenação do plano são impedidas de manter sua correção. Além disso, o número, ordem e tempo de chamadas a funções definidas pelo usuário são dependentes de implementação. Não confie nessa semântica de invocação. Além da constante RAND não-determinística interna em tempo de execução, e da família GETDATE, o número, ordem e tempo das chamadas dependerão do plano escolhido.

Práticas recomendadas

Recomendamos que você siga as diretrizes a seguir sempre que possível:

1. Escreva funções estritamente determinísticas quando você tiver escolha. Em particular, torne suas funções Transact-SQL associadas por esquema.

2. Limite o uso de funções não-determinísticas nas listas de seleção mais externas.

3. Não use funções não-determinísticas em consultas de desempenho críticas.

4. Não confie no número, ordem ou tempo de chamadas, porque esses podem ser dependentes de implementação.

Para obter mais informações, consulte Funções determinísticas e não-determinísticas.