CONSTRUINDO FUNÇÕES PARA SQL SERVER

Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Para efetuar o download você precisa estar logado. Clique aqui para efetuar o login
Confirmar voto
0
 (5)  (0)

Aprenda com exemplos práticos a construir funções para o SQL Server. Neste artigo exploramos os três tipos possíveis de funções construidas pelo usuários usando Transact-SQL.

Sem rodeios: Funções em T-SQL são rotinas que retornam valores ou tabelas. Com elas você poderá construir visões parametrizadas ou ainda construir suas próprias funções, semelhantes a DATE(), STUFF(), LTrim() dentre outras. Existem três tipos de funções possíveis. Segue-se um caso de uso prático para cada uma delas:

Exemplos:

1 – Deseja-se retirar todos os espaços em branco de uma string qualquer.

Vamos elaborar uma função para retirar todos os espaços em branco de uma string qualquer com tamanho máximo de 1000 caracteres. Usaremos a função built-in (função interna do sql server) ltrim() que retira os espaços em branco do lado esquerdo e rtrim() que retira os espaços em branco da direita.
 
A – Tipo de função: Scalar-valued user-defined function:
 
CREATE FUNCTION TRIM(@ST VARCHAR(1000))
RETURNS VARCHAR(1000)
BEGIN
   RETURN(LTRIM(RTRIM(@ST)))
END

 

B – Invocando uma Scalar-valued user-defined function:
 
SELECT '>' + DBO.TRIM(' WELLYNGTON MOREIRA ')+'<'
 
C – Resultado obtido:
 

 

 

D – Considerações importantes:
 
i.     A função criada é de domínio do database ao qual ela foi criada, assim sendo, para
invocá-la de outro database se faz necessário o uso da assinatura completa da função:
 
SELECT []..([parametros-opcioanais]...)
 

 

2 – Deseja-se uma tabela com os registros de todos os tempos possíveis em intervalos de minutos parametrizáveis entre duas datas quaisquer.

Como o problema requer o retorno de datas em intervalos de minutos, vamos criar uma tabela em nossa função com um campo do tipo DATETIME, utilizando a função built-in (função interna do SQL Server) DATEADD() para incrementar uma data inicial até a data final desejada em intervalos de minutos = MINUTE.
 
A – Tipo de função: Multi-statement table-valued function
 
CREATE FUNCTION DtsMinutos(@min int, @dti datetime, @dtf datetime)
RETURNS @tbl TABLE(dt datetime)
AS
BEGIN
    WHILE @dti <= @dtf
    BEGIN
      INSERT INTO @tbl(dt) VALUES (@dti)
      SET @dti = DATEADD(MINUTE,@min,@dti)
    END      
    RETURN
END
 
B – Invocando uma Multi-statement table-valued function:

 
SELECT *
FROM   DtsMinutos(12,'2011-01-01 12:00','2011-01-01 17:00')
 
C – Resultado obtido:
 

 

 

3 – Deseja-se uma tabela com os FUNCIONÁRIOS contratados após uma data específica.
Para este problema vamos supor uma tabela povoada com três atributos: A matrícula do tipo int, o nome do tipo varchar(80)  e dataContratacao do tipo dateTime com a data que o funcionário foi contratado.
 
A – Tipo de função: Inline table-valued function
 
CREATE FUNCTION funcionariosApos(@dt datetime)
RETURNS TABLE
AS
RETURN (SELECT *
        FROM  FUNCIONARIO
        WHERE dataContratacao >= @dt)

       

 

B – Invocando uma Multi-statement table-valued function:
 

SELECT * FROM funcionariosApos('2000-01-01')
 
C – Resultado obtido:

 

 

 

Até a próxima e avante!

 
Você precisa estar logado para dar um feedback. Clique aqui para efetuar o login
Receba nossas novidades
Ficou com alguma dúvida?