none
Procedure Variaveis RRS feed

  • Pergunta

  • Boa Noite,

    Caros,

    gostaria de rodar uma procedure ao qual os parametros de entrada decidira qual coluna na tabela o dado sera enviado...por exemplo:


    ALTER PROCEDURE [dbo].[testeproc]

    @var nvarchar(10)

    as

    UPDATE Base.dbo.teste
    SET @var = 4 WHERE (a= 2) AND (b<= 50) ;



    ou seja @var pode ser uma coluna x na tabela ou uma coluna y......

    blza!

    Valew!
    sexta-feira, 24 de outubro de 2008 20:45

Respostas

  • Tiodimi,

     

    Como você destacou que a quantidade de Updates é fixo, poderiamos entar criar variáveis para cada Update definir o código desta forma:

     

    Code Snippet

    CREATE PROCEDURE uspAtualiza

    @Tabela VARCHAR(30),

    @Coluna VARCHAR(30),

    @Valor VARCHAR(100),

    @FlagTexto CHAR(1)

    AS

     

    DECLARE @cmdSQL VARCHAR(200),

    @cmdSQL1 VARCHAR(200),

    @cmdSQL2 VARCHAR(200)

     

    SET @cmdSQL = 'UPDATE ' + @Tabela + ' SET ' + @Coluna + ' = '

    SET @cmdSQL1 = 'UPDATE ' + @Tabela + ' SET ' + @Coluna + ' = '

    SET @cmdSQL2 = 'UPDATE ' + @Tabela + ' SET ' + @Coluna + ' = '

     

    IF @FlagTexto = 'S'

     Begin

      SET @cmdSQL = @cmdSQL + '''' + @Valor + ''''

      SET @cmdSQL1 = @cmdSQL2 + '''' + @Valor + ''''

      SET @cmdSQL1 = @cmdSQL2 + '''' + @Valor + ''''

     End

     

    IF @FlagTexto = 'N'

     Begin

      SET @cmdSQL = @cmdSQL + @Valor

      SET @cmdSQL1 = @cmdSQL1 + @Valor

      SET @cmdSQL2 = @cmdSQL2 + @Valor

     End

     

    EXEC (@cmdSQL)

     

     

    Fiz uma pequena adaptação ao exemplo do Gustavo, mas vou pensar em uma solução para utilizar um número menor de variáveis.

    terça-feira, 28 de outubro de 2008 09:58
    Moderador

Todas as Respostas

  • Boa Noite,

     

    Você terá que usar uma SQL dinâmica. O script abaixo é um começo:

     

    Code Snippet

    CREATE PROCEDURE uspAtualiza

    @Tabela VARCHAR(30),

    @Coluna VARCHAR(30),

    @Valor VARCHAR(100),

    @FlagTexto CHAR(1)

    AS

     

    DECLARE @cmdSQL VARCHAR(200)

    SET @cmdSQL = 'UPDATE ' + @Tabela + ' SET ' + @Coluna + ' = '

     

    IF @FlagTexto = 'S'

    SET @cmdSQL = @cmdSQL + '''' + @Valor + ''''

     

    IF @FlagTexto = 'N'

    SET @cmdSQL = @cmdSQL + @Valor

     

    EXEC (@cmdSQL)

     

    Agora é codificar sua cláusula WHERE se for o caso.

     

    [ ]s,

     

    Gustavo

     

    sexta-feira, 24 de outubro de 2008 23:05
  • vo tentar...GRATO!
    sábado, 25 de outubro de 2008 03:42
  • Boa Tarde, Gustavo....

    Seguinte...obrigado pela ajuda...consegui fazer a adptacao...mais o problema é q tenho q colocar um exec para cada update....e tenho varios...nao tem como colocar 1 só para todos!?


    Valew!


    segunda-feira, 27 de outubro de 2008 15:54
  • Tiodimi,

     

    Você quer em um Exec realizar vários Updates?

    segunda-feira, 27 de outubro de 2008 16:26
    Moderador
  • é possivel?
    segunda-feira, 27 de outubro de 2008 17:05
  • Tiodimi,

     

    Possível é, mas teriamos que entender como poderiamos identificar em qual momento teriamos que fazer mais de um Update!!!

    segunda-feira, 27 de outubro de 2008 18:26
    Moderador
  • na realidade...o numero de update...é fixo...mais tenho vario update...para o exemplo acima funcionar...eu usei um exec para cada...update...



    Ok!

    Valew!
    segunda-feira, 27 de outubro de 2008 19:06
  • Tiodimi,

     

    Como você destacou que a quantidade de Updates é fixo, poderiamos entar criar variáveis para cada Update definir o código desta forma:

     

    Code Snippet

    CREATE PROCEDURE uspAtualiza

    @Tabela VARCHAR(30),

    @Coluna VARCHAR(30),

    @Valor VARCHAR(100),

    @FlagTexto CHAR(1)

    AS

     

    DECLARE @cmdSQL VARCHAR(200),

    @cmdSQL1 VARCHAR(200),

    @cmdSQL2 VARCHAR(200)

     

    SET @cmdSQL = 'UPDATE ' + @Tabela + ' SET ' + @Coluna + ' = '

    SET @cmdSQL1 = 'UPDATE ' + @Tabela + ' SET ' + @Coluna + ' = '

    SET @cmdSQL2 = 'UPDATE ' + @Tabela + ' SET ' + @Coluna + ' = '

     

    IF @FlagTexto = 'S'

     Begin

      SET @cmdSQL = @cmdSQL + '''' + @Valor + ''''

      SET @cmdSQL1 = @cmdSQL2 + '''' + @Valor + ''''

      SET @cmdSQL1 = @cmdSQL2 + '''' + @Valor + ''''

     End

     

    IF @FlagTexto = 'N'

     Begin

      SET @cmdSQL = @cmdSQL + @Valor

      SET @cmdSQL1 = @cmdSQL1 + @Valor

      SET @cmdSQL2 = @cmdSQL2 + @Valor

     End

     

    EXEC (@cmdSQL)

     

     

    Fiz uma pequena adaptação ao exemplo do Gustavo, mas vou pensar em uma solução para utilizar um número menor de variáveis.

    terça-feira, 28 de outubro de 2008 09:58
    Moderador
  • valews!..mais eu tenho bastante update....
    terça-feira, 28 de outubro de 2008 13:31
  • Tiodimi,

     

    Mas você mesmo disse que a quantidade era fixa!!!

     

    Por isso eu postei este exemplo.

     

    terça-feira, 28 de outubro de 2008 15:28
    Moderador
  • a quantidade..é fixa...mais é assim..tipo..esses updates...vem de outro software nao sou eu q escrevo...ou seja...para criar a procedure...é so copiar e colar...mais....tenho q colocar um exec..no final de cada..update..o numero de update...é fixo ...tipo hoje eu tenho uma 'syntax' com 30 updates....o q eu pensei é se tem tipo....um exec geral....?!!


    valew!


    terça-feira, 28 de outubro de 2008 16:05