Ir para conteúdo
Fórum Script Brasil
  • 0

Automação de Comandos SQL


Josemberg de Oliveira

Pergunta

Ola Pessoal,

eu tenho esse codigo SQL

DECLARE @PROD INT

SET @PROD = 12133636

SELECT CODCATITE, DESCATITE FROM IBETCATITE WHERE CODCATITE = @PROD

UPDATE IBETCATITE SET INDSTUITECAT = 'A', BOLINTMVMITE = 0 WHERE CODCATITE = @PROD

UPDATE IBETITECMZ SET BOLEVRPMT = 1 WHERE CODCATITE = @PROD

onde eu dou um select e dois Update no meu banco, com o criterio de seleção que é o meu codigo de produto (@PROD), so que as vezes eu preciso executar esse comando mais de uma vez com diferentes codigos de produto, gostaria de saber se existe a possibilidade de criar uma lista de codigos de produtos e fazer com que o SQL execute esse comando automaticamente de acordo com essa lista de codigos dos produtos que eu quero?

Link para o comentário
Compartilhar em outros sites

4 respostass a esta questão

Posts Recomendados

  • 0

Boa tarde Josemberg,

Não tem como você fazer isto no sql.

O código é inteiro. Se quiser passar um array, este deverá ser string. Ao colocar a variável no script, o sql não identificará o conteúdo como sendo uma sequência de números e dará erro.

Uma "solução alternativa" seria você criar seu script dinamicamente, e depois mandar o sql executar. Desta forma tem como você fazer:

CODCATITE = @PROD

ou

CODCATITE IN (12133636, 1213, 3636 )

Segue um exemplo:

DECLARE @Sql VARCHAR(50)
SET @Sql = 'SELECT GETDATE()'
EXEC (@sql)

Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia Josemberg

Eu faria de outra forma da uma olhada e ve se lhe atende.

DECLARE @PROD INT
DECLARE ATUALIZACAO CURSOR FOR 

SELECT CODCATITE FROM IBETCATITE WHERE CODCATITE IN ('LISTA DE VALORES')
    
OPEN ATUALIZACAO

    FETCH NEXT FROM ATUALIZACAO INTO @PROD

        UPDATE IBETCATITE SET INDSTUITECAT = 'A', BOLINTMVMITE = 0 WHERE CODCATITE = @PROD
        UPDATE IBETITECMZ SET BOLEVRPMT = 1 WHERE CODCATITE = @PROD 

    FETCH NEXT FROM  ATUALIZACAO INTO @PROD

CLOSE ATUALIZACAO
DEALLOCATE ATUALIZACAO

Editado por Bruno Faria
Link para o comentário
Compartilhar em outros sites

  • 0
Bom dia Josemberg

Eu faria de outra forma da uma olhada e ve se lhe atende.

DECLARE @PROD INT
DECLARE ATUALIZACAO CURSOR FOR 

SELECT CODCATITE FROM IBETCATITE WHERE CODCATITE IN ('LISTA DE VALORES')
    
OPEN ATUALIZACAO

    FETCH NEXT FROM ATUALIZACAO INTO @PROD

        UPDATE IBETCATITE SET INDSTUITECAT = 'A', BOLINTMVMITE = 0 WHERE CODCATITE = @PROD
        UPDATE IBETITECMZ SET BOLEVRPMT = 1 WHERE CODCATITE = @PROD 

    FETCH NEXT FROM  ATUALIZACAO INTO @PROD

CLOSE ATUALIZACAO
DEALLOCATE ATUALIZACAO

Opa bruno vlw vo testar aqui mas acho que vai dar certo.... amanha posto o resultado vlw cara!!!

Link para o comentário
Compartilhar em outros sites

  • 0

Neste comando:

SELECT CODCATITE FROM IBETCATITE WHERE CODCATITE IN ('LISTA DE VALORES')

Se fizer:

SELECT CODCATITE FROM IBETCATITE WHERE CODCATITE IN (@PROD)

Dará erro, pois a variável @PROD está declarada como INT. Mesmo que passar a variável para varchar, dará erro. O campo CODCATITE espera um INT para formar o script.

Você terá que declarar a variável @PROD como varchar e terá que criar um script dinâmico.

O comando:

SELECT CODCATITE FROM IBETCATITE WHERE CODCATITE IN ('LISTA DE VALORES')

Só funcionará se colocar manulmente a lista no campo. Se passar uma lista por variável, não funcionará.

Com o script dinâmico, você conseguirá dar os dois updates sem precisar de utilizar cursor.

Se o comando SELECT CODCATITE FROM IBETCATITE WHERE CODCATITE IN ('LISTA DE VALORES') funcionasse, não precisaria abrir cursor, bastaria dar o update direto, utilizando na clausula WHERE o IN...

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,3k
×
×
  • Criar Novo...