none
Clausula Where com variaveis? RRS feed

  • Pergunta

  • Gostaria de saber se é possível fazer em uma procedure isto abaixo?

    @idcli int,

    @idade int,

    @nome nvarchar

    as update cliente set idade = @idade where idCli =@idcli and nome = @nome

    Apenas passar duas variáveis através do Where  "logicamente é isso" mas como faço????

     
    terça-feira, 3 de julho de 2012 19:56

Respostas

  • Exatamente ele "converte" a informação do campo em tempo de execução e não o campo da tabela em si. O campo fica do mesmo jeito.

    Roberson A. Naves Analista de Sistemas

    • Sugerido como Resposta Roberson Naves quarta-feira, 4 de julho de 2012 12:18
    • Marcado como Resposta Igor S. Paim quarta-feira, 4 de julho de 2012 16:58
    quarta-feira, 4 de julho de 2012 12:18

Todas as Respostas

  • Lá vai:

    CREATE PROCEDURE dbo.sp_UPD_Cliente @idcli INT = NULL , @idade INT,

    @nome VARCHAR(MAX) AS BEGIN SET NOCOUNT ON UPDATE dbo.Cliente SET idade = @idade WHERE idCli = @idcli and nome=@nome END GO



    Roberson A. Naves Analista de Sistemas

    • Sugerido como Resposta Roberson Naves terça-feira, 3 de julho de 2012 20:12
    • Não Sugerido como Resposta Igor S. Paim terça-feira, 3 de julho de 2012 21:00
    terça-feira, 3 de julho de 2012 20:11
  • Olá Zigor,

    Voce teria que fazer assim

    CREATE PROCEDURE UPDATE_CLIENTE 
    --Parametros
    	@IDCLI INT,
    	@IDADE INT,
    	@NOME NVARCHAR(50)
    AS
    BEGIN
    --UPDATE
    	UPDATE CLIENTE
    		SET IDADE = @IDADE 
    	WHERE IDCLI = @IDCLI 
    	AND NOME = @NOME
    END



    Att.
    Lukas Baldan


    terça-feira, 3 de julho de 2012 20:12
  • Lá vai:

    CREATE PROCEDURE dbo.sp_UPD_Cliente @idcli INT = NULL , @idade INT,

    @nome VARCHAR(MAX) AS BEGIN SET NOCOUNT ON UPDATE dbo.Cliente SET idade = @idade WHERE idCli = @idcli and nome=@nome END GO



    Roberson A. Naves Analista de Sistemas

    Roberson a seu Proc funcionou 

    (eu apenas referenciei um exemplo do que queria fazer)

    seguindo a logica da sua proc fiz uma com os meus dados, mas só que eu tenho uma variavél do tipo text, que acaba dando incompatibilidade teria outra forma de fazer isso?  

    segue o código abaixo:

    CREATE PROCEDURE procXbpTTzh
           @categoria INT,
           @mva decimal,
           @ncm text,
           @uf nvarchar(2)
    AS
    BEGIN 
          SET NOCOUNT ON 

          UPDATE dbo.stMva
          SET 
                 mva = @mva    
          WHERE  
                 idCategoriaST = @categoria and uf = @uf and ncm = @ncm

    END
    GO

    Retornando o erro:
    Msg 402, Level 16, State 1, Procedure DIM_Simulador_MVA_Update, Line 14
    The data types text and text are incompatible in the equal to operator.



    @ZigorPaim

    terça-feira, 3 de julho de 2012 20:53
  • Existe uma limitação no operador lógico "=" para campos tipo TEXT.

    Ou você altera o tipo do campo para VARCHAR(MAX) por exemplo.

    Ou faz um CAST tipo assim.

    CREATE PROCEDURE procXbpTTzh
           @categoria INT,
           @mva decimal,
           @ncm varchar(max),
           @uf nvarchar(2)
    AS
    BEGIN
          SET NOCOUNT ON

          UPDATE dbo.stMva
          SET
                 mva = @mva   
          WHERE 
                 idCategoriaST = @categoria and uf = @uf and CAST(ncm AS VARCHAR(MAX)) = @ncm

    END
    GO


    Roberson A. Naves Analista de Sistemas


    • Editado Roberson Naves terça-feira, 3 de julho de 2012 21:16
    • Sugerido como Resposta Roberson Naves terça-feira, 3 de julho de 2012 21:16
    terça-feira, 3 de julho de 2012 21:16
  • Existe uma limitação no operador lógico "=" para campos tipo TEXT.

    Ou você altera o tipo do campo para VARCHAR(MAX) por exemplo.

    Ou faz um CAST tipo assim.

    CREATE PROCEDURE procXbpTTzh
           @categoria INT,
           @mva decimal,
           @ncm varchar(max),
           @uf nvarchar(2)
    AS
    BEGIN
          SET NOCOUNT ON

          UPDATE dbo.stMva
          SET
                 mva = @mva   
          WHERE 
                 idCategoriaST = @categoria and uf = @uf and CAST(ncm AS VARCHAR(MAX)) = @ncm

    END
    GO


    Roberson A. Naves Analista de Sistemas


    Roberson

    só para ver se eu entendi me diga, no momento que faço esse CAST

     idCategoriaST = @categoria and uf = @uf and CAST(ncm AS VARCHAR(MAX)) = @ncm

    o campo ncm na tabela mesmo sendo text ele consegue receber um varchar(max) sem ter que alterar o tipo do campo na tabela?

    ou ele altera nas propriedades da tabela o tipo de text para varchar(max)?



    @ZigorPaim

    quarta-feira, 4 de julho de 2012 11:43
  • Exatamente ele "converte" a informação do campo em tempo de execução e não o campo da tabela em si. O campo fica do mesmo jeito.

    Roberson A. Naves Analista de Sistemas

    • Sugerido como Resposta Roberson Naves quarta-feira, 4 de julho de 2012 12:18
    • Marcado como Resposta Igor S. Paim quarta-feira, 4 de julho de 2012 16:58
    quarta-feira, 4 de julho de 2012 12:18