Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

MarKteus

Problemas ao comparar em valores procedures no SQL Server

Recommended Posts

Oi pessoal, estou um problema bem chato em SQL.

Vejam:
SELECT @idTipo    = t.Tipo, @dataVigente = t.dataCurrent FROM tableTwo t (NOLOCK) WHERE t.id = @id

Quando tento fazer comparações por exemplos:
                IF NOT EXISTS (SELECT 1 FROM tableOne (nolock) WHERE id = @id) AND @idTipo <> 13 
               BEGIN

                       Select 'Valores todos corretos' as result

               END 

beleza, funfa normal

Mas quando insiro mais uma situação  ser comparada exemplo:
                IF NOT EXISTS (SELECT 1 FROM tableOne (nolock) WHERE id = @id) AND @idTipo <> 13 OR @idTipo <> 19
               BEGIN

                       Select 'Valores todos corretos' as result

               END 

A linha do if para de funcionar, não tenho erros nem nada, mas as instruções são simplemente ignoradas mesmo que as condições do IF sendo satisfeitas e ja tentei de tudo
assim:                IF NOT EXISTS (SELECT 1 FROM tableOne (nolock) WHERE id = @id) AND (@idTipo <> 13 OR @idTipo <> 19)
assim:                IF (NOT EXISTS (SELECT 1 FROM tableOne (nolock) WHERE id = @id) AND @idTipo <> 13 OR @idTipo <> 19)
assim:                IF (NOT EXISTS (SELECT 1 FROM tableOne (nolock) WHERE id = @id) AND (@idTipo <> 13 OR @idTipo <> 19)
e até assim:
                           IF (NOT EXISTS (SELECT 1 FROM tableOne (nolock) WHERE id = @id)
                               IF @idTipo <> 13 OR @idTipo <> 19

Alguma luz 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 14/04/2017 at 14:49, MarKteus disse:

OR @idTipo <> 19

 

Sera que ai não seria um AND ao invés de OR
Se for,  já troque para para o NOT IN para ficar mais legível:
 

 IF NOT EXISTS (SELECT 1 FROM tableOne (nolock) WHERE id = @id) AND @idTipo NOT IN(13,19)
      BEGIN
           Select 'Valores todos corretos' as result
      END 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por FabianoSouza
      Preciso corrigir o erro "Somente uma expressão pode ser especificada na lista de seleção quando a subconsulta não é introduzida com EXISTS." da minha consulta.
      SELECT TA.titulo AS 'Trilha' , (SELECT CAST(ROUND((Comportamental * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Comportamental ,CAST(ROUND((Técnico * 100.0) / (Comportamental + Técnico), 2) AS DECIMAL(5,1)) AS Técnico FROM ( SELECT SUM(CASE WHEN dbo.tabB.enfoque = '1' THEN 1 ELSE 0 END) AS Comportamental, SUM(CASE WHEN dbo.tabB.enfoque = '2' THEN 1 ELSE 0 END) AS Técnico, COUNT(*) AS Total FROM dbo.tabB ) tab ) FROM dbo.tabA AS TA Nessa consulta, preciso trazer o título (da tabA) e o resultado de um cálculo feito na subconsulta, nos campos Comportamental e Técnico.
    • Por JoãoNeto2
      Eu estava usando um programa em PHP que conectava e lia um banco de dados SQL Server. Do nada ele parou de funcionar apresentando a seguinte mensagem :
      O cliente não pode estabelecer conexão porque foi encontrado um erro durante os handshakes anteriores ao logon. As causas comuns incluem a tentativa do cliente de conectar-se a uma versão sem suporte do SQL Server, o servidor muito ocupado para aceitar novas conexões ou uma limitação de recursos (memória ou máximo de conexões permitidas) no servidor.
      Algumas informações para esclarecer :
      1-Consigo conectar o banco via Dbeaver da própria máquina que o programa PHP deixou de funcionar
      2-De outra máquina consigo conectar esse mesmo banco com o mesmo programa PHP
      3-Essa mesma máquina conecta outro banco SQL Server de outro cliente
      Ou seja, o mesmo programa conecta o mesmo banco mas de outra máquina e a mesma máquina consegue conectar outro banco SQL.
      O que pode ser?
    • Por mamotinho
      Olá, pessoal mais uma vez venho pedi a ajuda de vocês estou com um problema ao roda uma query que montei, eu sou iniciante na area e não tenho muito conhecimento então o codigo que fiz foi parte de meu conhecimento básico. bom o que eu quero resolver nessa query é o seguinte, eu quero consultar uma tabela e nela pega todos os registros com a a data vencida e lista ela dentro do while em seguida retornar dentro desse if o valor da coluna de cada uma exemplo de como fiz e ficou com loop infinito.

       
      declare @id int declare @getdate datetime select @id = IDCadastrado, @getdate = RegDate from BancoTeste.dbo.MinhaTabela where RegDate < getdate() while @id is not null begin select * from BancoTeste.dbo.MinhaTabela where IDCadastrado = @id end quando eu executo isso ai ele executa infinitamente o valor do primeiro registro repetidamente.
    • Por rdavisp
      Senhores, recorro a ajuda de vocês pois venho do banco de dados Oracle e tenho encontrado certa dificuldade para trabalhar com o SQL Server 2012, mais especificamente com a linguagem Transact-SQL. Pelo o que eu tenho percebido, não se trata de uma linguagem fortemente tipada em relação ao gerenciamento de escopo de variáveis. Exemplo, como as variavéis de cursores, que caso a primeira interação atribua valores válidos para as variáveis e caso na segunda volta do looping seja retornado nulo é mantido o valor da primeira interação. Outra coisa que eu estou tentando entender é o fato da seguinte query dentro de um bloco não retornar resultado dinamincamente na execução:
      SELECT @IDSALAMODELO = SM.ID
            ,@NOMEGRUPO    = G.NOME
        FROM CRT C
            ,GRUPO G
            ,SALAMODELO SM
            ,EMPRESA E
       WHERE C.IDGRUPO      = G.ID
         AND G.IDSALAMODELO = SM.ID
         AND SM.IDEMPRESA   = E.ID
         --
         AND C.ID       = CAST(@CRT AS INT)
         AND C.ATIVO    = @ATIVO
         AND G.ATIVO    = @ATIVO
         AND G.IDINTAKE = @INTAKEATUAL
         AND E.ID       = @IDEMPRESA
      E quando a executo numa janela de consulta com os parametros hardcode ela me retorna resultado. Não estou limpando elas em momento algum e ja tentei deixar os valores hardcode dentro do bloco, mas ainda assim, o resultado permance o mesmo, ou seja, não me retorna resultado.
      Por isso, se possível, gostaria da opinião de vocês para que eu posso solucionar esse problema.
      Grato.
    • Por Thyago Brasil
      Boa noite! Gostaria de saber dos colegas o seguinte.
      Preciso trazer uma gama grande de dados de algumas tabelas. A princípio criei uma view para trazer, porém, está muito lento.
      Aí a minha dúvida: procedure seria melhor que a view? O que me indicam?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.