none
Campo auto-incremento RRS feed

  • Pergunta

  • Qual a melhor forma de gerenciar campo auto-incremento no SQL Server 2005?

    Sei que o SQL possui o Identity, porém queria fazer isso usando uma procedure, trigger, function ou algo parecido.
    terça-feira, 13 de fevereiro de 2007 15:09

Respostas

  • sim.

    DECLARE @QUERY AS VARCHAR (8000)
    SET @QUERY = 'SELECT X FROM ' + @TABLENAME
    EXEC (@QUERY)

    se você precisar retornar o valor, talvez seja mais facil usar a [sp_executesql] ao invés de EXEC, veja no BooksOnline "sp_executesql" que tem uns exemplos bons
    terça-feira, 13 de fevereiro de 2007 22:13

Todas as Respostas

  • Apesar de o SQL ser o mais indicado, caso vc queira fazer via procedure, vc pode fazer é

    Insert

    PROCEDUREINSERT

    SELECT @NEXTID = MAX(ID) + 1 FROM TABELA

    INSERT INTO TABELA VALUES (@NEXTID, 'XXXXXXXXXXXX')

     

    Voce pode ou deve usar outros recursos como transação / trycatch / etc para gerenciar concorrencia

    terça-feira, 13 de fevereiro de 2007 15:25
  • Sergio, se entendi bem o @NEXTID é uma variável do sql?  Porém teria como fazer uma function genérica para que eu enviasse a tabela e o nome do campo PK e essa function me devolvesse a chave PK referente a tabela e campo enviados?


    terça-feira, 13 de fevereiro de 2007 20:47
  • Função seria meio complicado, pois você não poderia usar query dinamica e teria que fazer varios ifs ou CASE, mas dá

    o jeito seria


    IF @TABELA = 'TABELA1'

    SELECT @NEXTID = MAX(ID) FROM TABELA1

    IF @TABELA = 'TABELA2'

    SELECT @NEXTID = MAX(ID) FROM TABELA2

    IF @TABELA = 'TABELA3'

    SELECT @NEXTID = MAX(ID) FROM TABELA3

    return @NEXTID

     

    terça-feira, 13 de fevereiro de 2007 21:12
  • Em procedure posso fazer query dinamicamente?
    terça-feira, 13 de fevereiro de 2007 21:42
  • sim.

    DECLARE @QUERY AS VARCHAR (8000)
    SET @QUERY = 'SELECT X FROM ' + @TABLENAME
    EXEC (@QUERY)

    se você precisar retornar o valor, talvez seja mais facil usar a [sp_executesql] ao invés de EXEC, veja no BooksOnline "sp_executesql" que tem uns exemplos bons
    terça-feira, 13 de fevereiro de 2007 22:13