none
Stored Procedure, enviar uma array como parametro (p/ remover o execute('') ) RRS feed

  • Pergunta

  • Bom dia a todos. 

    Tenho uma dúvida há anos..rs e nunca consegui resolver, hoje a mesma esta causando certos problemas então vim tentar uma solução no fórum, já pesquisei bastante no google porém nunca encontrei o que realmente queria.

    Tenho a seguinte stored procedure:

    ALTER PROCEDURE [dbo].[boleto_ListagemClientes]
    @Convenio varchar(10),
    @Status varchar(10),
    @Restricao varchar(10)
    AS
    BEGIN
    SET NOCOUNT ON;
    execute ('
    SELECT     top 100 PERCENT  tbl_Admin.intid, tbl_Admin.str_URL, tbl_Admin.int_STATUS, tbl_Admin.int_RESTRICAO, tbl_CONFIG.sdt_firstMesCobrancaWMB
    FROM         tbl_Admin INNER JOIN
                          tbl_CONFIG ON tbl_Admin.intid = tbl_CONFIG.int_IDCLIENTE
    WHERE     (tbl_Admin.int_STATUS IN ('+@Status+')) AND (tbl_Admin.int_CONVENIO IN ('+ @Convenio +')) AND (tbl_Admin.int_RESTRICAO IN ('+ @Restricao+'))
    ORDER BY tbl_Admin.str_URL
    ')
    END

    eu chamo ela assim

    exec boleto_ListagemClientes '1','4,5','0,12,13,14'

    Enfim, gostaria de remover como uma string que é executada.

    é possível enviar os parametros '0,12,13,14' via um varchar e o sistema executar a consulta no in(@variavel) ?

    OBS: os parametros são muito variados, então não tem como eu enviar apenas um numero e lá na storedprocedure fazer uns if e de acordo com o parametro executar tal consulta, os parametros são muito aleatórios...

    Abraços a todas possíveis orientações.

    quinta-feira, 24 de janeiro de 2013 13:24

Respostas

  • Cara,

    É só você concatenar esses valores separados por um caracter especifico. Exemplo:

    "1|2|3|54|874|94|631|313|2|84|6|6|"

    Após retorna isso para a sua procedure, faça o que eu informei nessa thread abaixo para um outro colega:

    http://social.msdn.microsoft.com/Forums/pt-BR/transactsqlpt/thread/cd9224cb-9e91-4a64-bfdb-3fca28f9594c


    Atenciosamente, Samuel dos Anjos

    • Sugerido como Resposta Marcos Rocha quinta-feira, 24 de janeiro de 2013 16:01
    • Marcado como Resposta ASPX_BR sexta-feira, 25 de janeiro de 2013 11:25
    quinta-feira, 24 de janeiro de 2013 15:46

Todas as Respostas

  • Cara,

    É só você concatenar esses valores separados por um caracter especifico. Exemplo:

    "1|2|3|54|874|94|631|313|2|84|6|6|"

    Após retorna isso para a sua procedure, faça o que eu informei nessa thread abaixo para um outro colega:

    http://social.msdn.microsoft.com/Forums/pt-BR/transactsqlpt/thread/cd9224cb-9e91-4a64-bfdb-3fca28f9594c


    Atenciosamente, Samuel dos Anjos

    • Sugerido como Resposta Marcos Rocha quinta-feira, 24 de janeiro de 2013 16:01
    • Marcado como Resposta ASPX_BR sexta-feira, 25 de janeiro de 2013 11:25
    quinta-feira, 24 de janeiro de 2013 15:46
  • Obrigado funcionou perfeitamente...

    então para quem quiser ver como ficou basicamente ficou assim

    (após criar a function SPLIT)

    ALTER PROCEDURE [dbo].[boleto_ListagemClientes]
    @Convenio varchar(10),
    @Status varchar(10),
    @Restricao varchar(10)
    AS
    BEGIN
    SET NOCOUNT ON;

    SELECT     TOP (100) PERCENT tbl_Admin.intid, tbl_Admin.str_URL, tbl_Admin.int_STATUS, tbl_Admin.int_RESTRICAO, tbl_CONFIG.sdt_firstMesCobrancaWMB
    FROM         tbl_Admin with(nolock) INNER JOIN
                          tbl_CONFIG with(nolock) ON tbl_Admin.intid = tbl_CONFIG.int_IDCLIENTE
    WHERE     (tbl_Admin.int_STATUS IN
                              (SELECT     CODIGO
                                FROM          dbo.SPLIT(@Status, ',') AS T)) AND (tbl_Admin.int_CONVENIO IN
                              (SELECT     CODIGO
                                FROM          dbo.SPLIT(@Convenio, ',') AS T)) AND (tbl_Admin.int_RESTRICAO IN
                              (SELECT     CODIGO
                                FROM          dbo.SPLIT(@Restricao, ',') AS T))
    ORDER BY tbl_Admin.str_URL

    END

    sexta-feira, 25 de janeiro de 2013 11:26