Início > Comandos SQL, Virtual PASS BR > “Array” no SQL Server

“Array” no SQL Server

L&A Soluções – Consultoria em Banco de Dados SQL Server ( Suas informações em boas mãos! )

Ola galera, segue uma pequena dica de manipulação de resultados (“Array”) no SQL Server, abaixo mostrarei como surgiu a necessidade…

Tive essa semana a seguinte conversa com o grande amigo (Dentinho)

(Dentinho) Como faço um Array no SQL Server?

(Alex Souza) Cara, este comando especificamente não existe, mas tem jeito de fazer algo parecido

(Dentinho) No POSTGRES faço muito rápido com o comando ARRAY.

(Alex Souza) Me diga ai o que você esta precisando…

(Dentinho) Tenho uma Consulta que retorna as seguintes informações:

1

(Dentinho) Eu consigo trazer estes dados em uma unica linha separado por virgula? Desde ontem tento e não consigo…

(Dentinho) Exemplo: 123, 124, 125…

(Alex Souza) Quanto tempo você me dá para arrumar uma solução?

(Dentinho) 4 minutos

(Alex Souza) Certo, dá tempo até tomar um café antes… kkkk

… 4 minutos depois…

(Alex Souza) Pronto, a solução esta dada, vamos montar uma função (FuArrayNFTitulo) que retornará o seguinte:

2

… Segue abaixo a montagem do cenário e a função:  [FuArrayNFTitulo]

———————————
— Montagem do Cenário —
———————————

— Criando o Banco de Dados
CREATE DATABASE TestesBlog;

USE TestesBlog

— Criando a tabela
CREATE TABLE NF_Titulos (
NumNF int
, NumTitulo int
);

— Cada NF pode ter vários títulos (Populando…)
INSERT INTO NF_Titulos VALUES (111, 123) , (111, 124), (111, 125), (111, 126), (112, 127), (112, 128)

— Consulta que retorna os títulos em linhas (o problema do Dentinho…)
Select NumTitulo From NF_Titulos WHERE NumNF = 111

— Montamos a seguinte função: FuArrayNFTitulo que tem como entrada a NF e retorna os Títulos relacionados a esta NF
CREATE FUNCTION [dbo].[FuArrayNFTitulo] (@NumTit INT) 
RETURNS VARCHAR(MAX)
AS

BEGIN

DECLARE @Hist VARCHAR(MAX)
SET @Hist = ”

SELECT @Hist = @Hist + CASE WHEN @Hist = ” THEN ” ELSE ‘, ‘ END + Convert(varchar, NumTitulo)
FROM NF_Titulos
WHERE NumNF = @NumTit

RETURN @Hist

END

———————————————-
relogio-um-escravo-do-tempo

— Resultado da função (SOLUÇÃO) —
———————————————-

SELECT Resp = dbo.[FuArrayNFTitulo] (111)
Abraço a todos!
Valeu Dentinho…


Vejam também:

Matrizes no SQL Server 2005 ( Parte I | Parte II | Parte III )

Alex Souza
L&AConsultoria - Logo

  1. Maikel Alexsander Penz
    29/04/2014 às 11:56

    Bom Dia Alex,
    primeiramente parabéns pelo conteúdo do seu blog.

    Também tive essa necessidade no SQL Server um tempo atrás, pois também utilizava o comando ARRAY do PostgreSQL, que era muito simples.

    Encontrei outra solução para este problema no SQL Server, não precisando criar uma procedure para tal.

    select Stuff(
    (
    SELECT ‘, ‘ + cast(CODIGO as varchar(10))
    FROM PRODUTO
    FOR XML PATH(”)
    ),1,1,”
    )

    No exemplo acima, trago todos os produtos do banco, com o um separador definido por mim, no caso a vírgula.

    • 29/04/2014 às 12:11

      Obrigado Maikel,
      O Blog fica cada vez mais completo, com comentários e iterações como a que acabou de fazer!

      Muito boa a dica e mais simples de ser implementada!
      Muito obrigado pela dica e qualquer coisa estamos por aqui!

      Abraço!

  2. Newton Costa
    01/08/2014 às 13:58

    Alex
    Bom Boa tarde

    Tenho uma tabela com as seguintes colunas:
    mês ano saldo

    Montei um pivô que carrega os 12 meses do ano, porem necessito sum select que busque somente 3 ocorrências com base no parâmetro as ser passado, Ex. de paramatro (MES)
    O select deverá apresentar o conteúdo do mês que esta no parâmetro e os 2 anteriores.
    Se for o mês 05, mostra a colunar mês 3, mês 4 e mês 5.
    Não estou conseguindo montar este select.
    Peço ajuda.

    Atenciosamente

    Newton Costa

  3. mikhael salvati
    04/08/2015 às 09:27

    Preciso de uma ajuda sua alex!

  1. 17/06/2013 às 14:17
  2. 05/03/2014 às 16:28
  3. 04/08/2014 às 10:34

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: