sexta-feira, 29 de julho de 2016

Funções - SQL SERVER

Neste tópico apresentaremos as funções internas mais comuns, utilizadas no dia-dia dos profissionais, desenvolvedores, analistas, offices users e curiosos que se aventuram em SQL ..

O SQL Server fornece muitas funções internas e também permite criar funções definidas pelo usuário. As categorias de funções internas são classificadas em quatro (04) categorias principais.
Função
Descrição
Retornam um objeto que pode ser usado como referências de tabela em uma instrução SQL.
Funcionam em uma coleção de valores mas retornam um valor único de resumo.
Retornam um valor de classificação para cada linha em uma partição.
Funcionam em um valor único e retornam um valor único. As funções escalares podem ser usadas onde uma expressão é válida.
* Cada grupo merece um tópico especifico para poder detalhar e expor exemplos de sua funcionalidade, acompanhe no blog ...


       As funções de conjunto de linhas retornam um objeto que pode ser usado no lugar de uma referência de tabela em uma instrução do Transact-SQL.Todas as funções de conjunto de linhas são não determinísticas. Isso significa que essas funções nem sempre retornam os mesmos resultados a cada chamada.


OPENDATASOURCE 

Fornece informações de conexão ad hoc como parte de um nome de objeto de quatro partes sem usar um nome de servidor vinculado.

Ex: 
SELECT FROM OPENDATASOURCE('SQLNCLI','Data Source=BR\SQL;Integrated Security=SSPI')
.AdventureWorks2012.HumanResources.Employee


OPENQUERY 

Executa a consulta passagem especificada no servidor vinculado especificado. Esse servidor é uma fonte de dados OLE DB. OPENQUERY pode ser referenciada na cláusula FROM de uma consulta como se fosse um nome de tabela. OPENQUERY também pode ser referenciada como a tabela de destino de uma instrução INSERT, UPDATE ou DELETE. Isso dependerá dos recursos do provedor OLE DB. Embora a consulta possa retornar vários conjuntos de resultados, OPENQUERY retorna somente o primeiro deles.

Ex: 

A.Executando uma consulta de passagem UPDATE

O exemplo a seguir usa uma consulta de passagem UPDATE no servidor vinculado criado no exemplo A.
UPDATE OPENQUERY (SQL8, 'SELECT name FROM joe.titles WHERE id = 101') 
SET name = 'ADifferentName'

B.Executando uma consulta de passagem INSERT

O exemplo a seguir usa uma consulta de passagem INSERT no servidor vinculado criado no exemplo A.
INSERT OPENQUERY (SQL8, 'SELECT name FROM joe.titles')
VALUES ('NewTitle')

C.Executando um consulta de passagem DELETE

O exemplo a seguir usa uma consulta de passagem DELETE para excluir a linha inserida no exemplo C.
DELETE OPENQUERY (SQL8, 'SELECT name FROM joe.titles WHERE name = ''NewTitle''')

OPENXML

Fornece  uma exibição de conjunto de linhas em um documento XML.
Ex: EXEC sp_xml_preparedocument @idoc OUTPUT, @doc;


-- Execute a SELECT statement that uses the OPENXML rowset provider.
SELECT    *
FROM       OPENXML (@idoc, '/ROOT/Diretorio',1)
           WITH    (CustomerID  varchar(10),
                    ContactName varchar(20));

Continue a leitura em Funções De agregações ...

Funções De agregações - SQL SERVER

        As funções de agregação executam um cálculo em um conjunto de valores e retornam um único valor. Com exceção de COUNT, as funções de agregação ignoram valores nulos. As funções de agregação normalmente são usadas com a cláusula GROUP BY da instrução SELECT.
Todas as funções de agregação são determinísticas. Isso significa que as funções de agregação retornam o mesmo valor sempre que são chamadas, consulte  Funções determinísticas e não determinísticas.

Funções de agregação podem ser usadas como expressões apenas nos seguintes casos:

  • A lista de seleção de uma instrução SELECT (uma subconsulta ou uma consulta externa).
  • Uma cláusula HAVING.

AVG

Retorna a média dos valores em um grupo. Valores nulos são ignorados.
Ex: SELECT AVG(Salarios)FROM dbo.RecursosHumanos.Empregados


COUNT

Retorna o número de itens de um grupo. Isso inclui valores NULL e duplicados.
Ex: SELECT COUNT(*)FROM dbo.RecursosHumanos.Empregados

MAX
Retorna o valor máximo na expressão.
Ex: SELECT MAX(Salarios)FROM dbo.RecursosHumanos.Empregados
MIN
Retorna o valor minimo na expressão.
Ex: SELECT MIN(Salarios)FROM dbo.RecursosHumanos.Empregados


SUM

Retorna a soma de todos os valores ou somente os valores DISTINCT na expressão. SUM pode ser usado exclusivamente com colunas numéricas. 
Ex: SELECT SUM(Salarios)FROM dbo.RecursosHumanos.Empregados


Outras funções de agregações não comum. Para estudo de casa: CHECKSUM_AGG,COUNT_BIG,GROUPING,GROUPING_ID,STDEV,STDEVP,VARP

Funções De Classificação - SQL Server

As funções de classificação retornam um valor de classificação para cada linha em uma partição. Dependendo da função usada, algumas linhas podem receber o mesmo valor que outras. As funções de classificação são não determinísticas.

O transact-SQL fornece as seguintes funções de classificação:

RANK

Retorna a classificação de cada linha na partição de um conjunto de resultados. A classificação de uma linha é um mais o número de classificações que vêm antes da linha em questão.

SELECT
P.ID_Produto,P.ID_Categoria,P.Quantidade, 
RANK() OVER(PARTITION BY P.ID_Categoria ORDER BY P.Quantidade DESCAS 'RANKING'
FROM
            Produtos.ProdutosInventario P
ORDER BY
            'RANKING'

*
Se duas ou mais linhas empatarem em uma classificação, cada linha empatada receberá a mesma classificação. Por exemplo, se os dois melhores vendedores tiverem o mesmo valor de SalesYTD, os dois serão classificados com o número um. O vendedor com o próximo SalesYTD maior será classificado com o número três, pois há duas linhas com classificação mais alta. Portanto, a função RANK nem sempre retorna inteiros consecutivos.

ROW_NUMBER

Este retorna o número sequencial de uma linha em uma instrução executado no conjunto de resultados, iniciando em 1 para a primeira linha de cada partição.

Observação que fique explicito o numero da linha, não tem relação com ID Da tabela em execução.

SELECT
           ROW_NUMBER OVER(ORDER BY ID_VENDA DESC) AS Row,
           Nome, SobreNome
FROM
           dbo.VENDAS

ROW Nome         SobreNome               
--- -----------  ---------------------- 
1   Linda        Mitchell               
2   Jae          Pak                    
3   Michael      Blythe                 
4   Jillian      Carson                 
5   Ranjit       Varkey Chudukatil      


Outras funções de classificação não muito comum, para complementar os estudos rs ..

Funções Escalares - SQL Server

O SQL fornece muitas funções internas, neste tópico detalhamos as funções escalares por categoria:

Categoria
Descrição
Retornam informações sobre a configuração atual.
Suporte para conversão de tipos de dados.
Retornam informações sobre cursores.
Executam operações em uma data e valores de entrada de hora e retornam valores de cadeia de caracteres, numéricos ou de data e hora.
Executam operações lógicas.
Executam cálculos baseados em valores de entrada fornecidos como parâmetros às funções e retorna valores numéricos.
Retornam informações sobre o banco de dados e objetos de banco de dados.
Retornam informações sobre usuários e funções.
Executam operações em um valor de entrada de cadeia de caracteres (char ouvarchar) e retornam uma cadeia de caracteres ou valor numérico.
Executam operações e informações de retorno sobre valores, objetos e configurações em uma instância do SQL Server.
Retornam informações estatísticas sobre o sistema.
Executam operações em valores de entrada de texto ou imagem ou colunas e retornam informações sobre o valor.

Determinismo De Funções

As funções internas do SQL Server são determinísticas ou não determinísticas. As funções são determinísticas quando retornam sempre o mesmo resultado quando são chamadas com o uso de um conjunto específico de valores de entrada. As funções são não determinísticas quando podem retornar resultados diferentes sempre que são chamadas, mesmo com o mesmo conjunto específico de valores de entrada. Para obter mais informações, consulte Funções determinísticas e não determinísticas.

Agrupamento De Funções

As funções que usam uma entrada de cadeia de caracteres e retornam uma saída de cadeia de caracteres usam o agrupamento da cadeia de caracteres de entrada para a saída.
As funções que usam entradas de não caracteres e retornam uma cadeia de caracteres usam o agrupamento padrão do banco de dados atual para a saída.
As funções que usam várias entradas de cadeia de caracteres e retornam uma cadeia de caracteres usam as regras de precedência de agrupamento para definir o agrupamento da cadeia de caracteres de saída. Para obter mais informações, consulte Precedência de agrupamento (Transact-SQL).