none
UPDate condicional - SQL 2000 RRS feed

  • Pergunta

  • Olá,

     

    Tenho uma procedure que tem um update numa tabela. A pergunta é tem como fazer uma condição em um campo.

     

    esse é o código:

     

    CREATE procedure pVinculo
    (
        @Operacao   integer,
        @idVinculo    integer,
        @idPlano      integer,
        @idCliente    integer,
        @DataVinculo  smalldatetime,

        @BaixaVinculo smalldatetime,

        @OBS          text
    )
    as

    update tbVinculo set
               idPlano = @idPlano,
               DataVinculo = @DataVinculo,

               BaixaVinculo = BaixaVinculo,

               OBS= @OBS
    where idVinculo = @idVinculo

    end

     

    preciso que quando o parâmetro @DataVinculo ou @BaixaVinculo receber '01/01/1900'

    os campos DataVinculo e BaixaVinculo receba null.

     

    Outra duvida:

     

    Campo text não aceita upper - OBS = upper(@OBS)

     

    Obrigado.

     

     

     

    terça-feira, 12 de fevereiro de 2008 14:41

Respostas

  • Olá Gilberto,

     

    Como o Jr. havia comentado infelizmente o TEXT sofre de algumas limitações. No caso do SQL Server 2005 podemos contar com o VARCHAR(MAX) para contorná-las. No SQL Server 2000 só resta mesmo fazer um UPPER via aplicação e gravar no banco já em formato maiúscula ainda que essa seja uma solução um pouco inflexível.

     

    No resto, que bom que a solução resolveu o seu problema.

     

    [ ]s,

     

    Gustavo

    terça-feira, 12 de fevereiro de 2008 17:54

Todas as Respostas

  • Boa Tarde,

     

    Veja se o código abaixo o atende:

     

    Code Snippet

    update tbVinculo set

    idPlano = @idPlano,

    DataVinculo = Case When @BaixaVinculo = '19000101' or @DataVinculo = '19000101' Then Null Else @DataVinculo End,

    BaixaVinculo = Case When @BaixaVinculo = '19000101' or @DataVinculo = '19000101' Then Null Else @BaixaVinculo End,

    OBS= @OBS

    where idVinculo = @idVinculo

     

     

    Infelizmente campos TEXT possuem essas limitações. Você terá que efetuar o UPPER via aplicação no momento do INSERT.

     

    [ ]s,

     

    Gustavo

     

    terça-feira, 12 de fevereiro de 2008 15:09
  • Retornou o seguinte erro(The text, ntext, and image data types are invalid for local variables)

     para sua sugestão:

     

    DataVinculo = case when @DataVinculo = '1900-01-01' then
                                  null
                             else
                                  @DataVinculo
                             end,
    BaixaVinculo = case when @BaixaVinculo = '1900-01-01' then
                                  null
                             else
                                  @BaixaVinculo
                             end,

    inclusive usei cast('1900-01-01' as smalldatetime) e também deu o mesmo erro.

     

     

    Obrigado.

    terça-feira, 12 de fevereiro de 2008 15:36
  • Gilberto,

     

    Isso mesmo a função Upper, trata-se de uma função para trabalhar com valores string, campos: Char, Varchar, NVarchar, NChar, no caso de Text este tipo de funcionalidade não é permitida.

     

    Mas você poderá determinar que os caracteres devem ser preenchidas em maiúscula diretamente na sua aplicação.

     

    Seguindo o exemplo do Gustavo com certeza você vai resolver a sua dúvida.

     

    terça-feira, 12 de fevereiro de 2008 15:37
  • Gustavo,

     

    Sua solução funcinou o erro mencionado era por que eu tinha definido a variável OBS como text foi só mudar para varchar que resolveu o problema.

     

    Mais uma vez,

     

    Obrigado.

    terça-feira, 12 de fevereiro de 2008 17:48
  • Olá Gilberto,

     

    Como o Jr. havia comentado infelizmente o TEXT sofre de algumas limitações. No caso do SQL Server 2005 podemos contar com o VARCHAR(MAX) para contorná-las. No SQL Server 2000 só resta mesmo fazer um UPPER via aplicação e gravar no banco já em formato maiúscula ainda que essa seja uma solução um pouco inflexível.

     

    No resto, que bom que a solução resolveu o seu problema.

     

    [ ]s,

     

    Gustavo

    terça-feira, 12 de fevereiro de 2008 17:54