none
SQLSERVER IDENTITY RRS feed

  • Pergunta

  • Olá,

    Vamos supor o seguinte...

    Temos uma tabela com chave composta.

    tb_CLIENTES

    PK(CODFILIAL,CODCLIENTE)

    Temos FILIAL 1, FILIAL 2.

    Tem como o IDENTITY  automaticamente gerar.

    CODFILIAL =1, CODCLIENTE = 1

    CODFILIAL =1, CODCLIENTE = 2

    CODFILIAL =2, CODCLIENTE = 1

    CODFILIAL =2, CODCLIENTE = 2

    Invez de.

    CODFILIAL =1, CODCLIENTE = 1

    CODFILIAL =1, CODCLIENTE = 2

    CODFILIAL =2, CODCLIENTE = 3

    CODFILIAL =2, CODCLIENTE = 4

    CODFILIAL, VAI SER UMA FK E PK AO MESMO TEMPO.

    Atenciosamente,

    Rodrigo Faria

    sexta-feira, 7 de novembro de 2014 18:52

Respostas

  • Bom dia Rodrigo,

    O Identity é um campo sequencial que o usuário determina qual é o valor inicial e de qual o intervalo da sequência.

    Isso que você quer fazer não é um campo sequencial, é um campo condicional: se o cliente for x, comece da última sequência; caso o cliente for y, comece da sequência 1.

    Para isso você terá que fazer um ajuste na programação, recuperando se o cliente já existe e recuperar qual foi a última sequência dele, para acrescentar mais 1.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    • Marcado como Resposta Rodrigo Q.Faria sábado, 8 de novembro de 2014 12:10
    sábado, 8 de novembro de 2014 11:19
  • Rodrigo,

    Com Identity não tem como não...

    Mas a partir da versão 2012 você tem o objeto "sequencia", você pode criar 2 sequencias e utilizar uma em cada filial na hora de fazer o seu insert.

    Segue o link com mais informações.

    http://msdn.microsoft.com/pt-br/library/ff878091.aspx


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    • Marcado como Resposta Rodrigo Q.Faria sábado, 8 de novembro de 2014 12:10
    sexta-feira, 7 de novembro de 2014 19:00
  • Eu queria fazer automaticamente, porque posso ter n.filiais.

    Tenho medo de fazer via trigger usando o max() e dar alguma zica.

    Rodrigo,

    O objeto "sequencia" do MS SQL Server você não irá usar trigger nem o max().

    Veja o link para entender melhor o funcionamento...


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    • Marcado como Resposta Rodrigo Q.Faria sábado, 8 de novembro de 2014 12:10
    sexta-feira, 7 de novembro de 2014 19:45

Todas as Respostas

  • Rodrigo,

    Com Identity não tem como não...

    Mas a partir da versão 2012 você tem o objeto "sequencia", você pode criar 2 sequencias e utilizar uma em cada filial na hora de fazer o seu insert.

    Segue o link com mais informações.

    http://msdn.microsoft.com/pt-br/library/ff878091.aspx


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    • Marcado como Resposta Rodrigo Q.Faria sábado, 8 de novembro de 2014 12:10
    sexta-feira, 7 de novembro de 2014 19:00
  • Eu queria fazer automaticamente, porque posso ter n.filiais.

    Tenho medo de fazer via trigger usando o max() e dar alguma zica.

    sexta-feira, 7 de novembro de 2014 19:33
  • Eu queria fazer automaticamente, porque posso ter n.filiais.

    Tenho medo de fazer via trigger usando o max() e dar alguma zica.

    Rodrigo,

    O objeto "sequencia" do MS SQL Server você não irá usar trigger nem o max().

    Veja o link para entender melhor o funcionamento...


    Tulio Rosa | http://tuliorosa.com.br | Se resolveu seu problema, marque como resposta ou vote

    • Marcado como Resposta Rodrigo Q.Faria sábado, 8 de novembro de 2014 12:10
    sexta-feira, 7 de novembro de 2014 19:45
  • Bom dia Rodrigo,

    O Identity é um campo sequencial que o usuário determina qual é o valor inicial e de qual o intervalo da sequência.

    Isso que você quer fazer não é um campo sequencial, é um campo condicional: se o cliente for x, comece da última sequência; caso o cliente for y, comece da sequência 1.

    Para isso você terá que fazer um ajuste na programação, recuperando se o cliente já existe e recuperar qual foi a última sequência dele, para acrescentar mais 1.

    Abs.


    Dicas de programação em .net, C# e SQL - http://smcode.com.br/blog.aspx

    • Marcado como Resposta Rodrigo Q.Faria sábado, 8 de novembro de 2014 12:10
    sábado, 8 de novembro de 2014 11:19
  • Olá,

    Vou criar alguma forma para criar as sequencias automaticamente, obrigado a todos.

    Atenciosamente,

    Rodrigo

    sábado, 8 de novembro de 2014 12:11