Usuário com melhor resposta
SQLSERVER IDENTITY

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
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
-
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
-
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
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
-
-
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
-
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
-