Usuário com melhor resposta
Trigger Com incremento

Pergunta
-
Respostas
-
Olá,
Você pode definir a sua chave primaria como composta.
Terá duas colunas nas chave:
- id to dipo inteiro; Nesta coluna você pode utilizar identity para que seja sequencial.
- data do tipo date
Se estiveres utilizando o sql 2012 poderás utilizar o recurso de sequence.
No meu blog tem um exemplo de como utilizar sequence.
Link: http://bobgalvao.wordpress.com/2011/10/06/objeto-sequence-no-sql-server-denali/
"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto GalvãoMCITP - Administration SQL Server 2008MCITP - Developer SQL Server 2008MCSA - SQL Server 2012Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Leonardo N. D'Amato quinta-feira, 22 de agosto de 2013 18:57
- Marcado como Resposta Alysson Queiroz sexta-feira, 23 de agosto de 2013 17:15
-
Opa,
Neste caso sugiro que você defina a sua coluna de ID com identity.
Ficaria assim a sua tabela:
CREATE TABLE [dbo].[tbExemplo](
[id] [int] IDENTITY(1,1) NOT NULL,
[data] [date] NOT NULL,
[descricao] [varchar](50) NOT NULL,
CONSTRAINT [PK_tbExemplo] PRIMARY KEY CLUSTERED
(
[id] ASC,
[data] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto GalvãoMCITP - Administration SQL Server 2008MCITP - Developer SQL Server 2008MCSA - SQL Server 2012Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão quinta-feira, 22 de agosto de 2013 19:25
- Marcado como Resposta Alysson Queiroz sexta-feira, 23 de agosto de 2013 17:16
Todas as Respostas
-
Olá,
Você pode definir a sua chave primaria como composta.
Terá duas colunas nas chave:
- id to dipo inteiro; Nesta coluna você pode utilizar identity para que seja sequencial.
- data do tipo date
Se estiveres utilizando o sql 2012 poderás utilizar o recurso de sequence.
No meu blog tem um exemplo de como utilizar sequence.
Link: http://bobgalvao.wordpress.com/2011/10/06/objeto-sequence-no-sql-server-denali/
"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto GalvãoMCITP - Administration SQL Server 2008MCITP - Developer SQL Server 2008MCSA - SQL Server 2012Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Leonardo N. D'Amato quinta-feira, 22 de agosto de 2013 18:57
- Marcado como Resposta Alysson Queiroz sexta-feira, 23 de agosto de 2013 17:15
-
-
Opa,
Neste caso sugiro que você defina a sua coluna de ID com identity.
Ficaria assim a sua tabela:
CREATE TABLE [dbo].[tbExemplo](
[id] [int] IDENTITY(1,1) NOT NULL,
[data] [date] NOT NULL,
[descricao] [varchar](50) NOT NULL,
CONSTRAINT [PK_tbExemplo] PRIMARY KEY CLUSTERED
(
[id] ASC,
[data] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto GalvãoMCITP - Administration SQL Server 2008MCITP - Developer SQL Server 2008MCSA - SQL Server 2012Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Sugerido como Resposta Roberto Galvão quinta-feira, 22 de agosto de 2013 19:25
- Marcado como Resposta Alysson Queiroz sexta-feira, 23 de agosto de 2013 17:16
-
Desta forma ele não esta criando o ID com "anomesdiaesequencia" = 20130822001 mas esta bloqueando os id com erro no insert e gravando o próximo.
O que na verdade queria era criar um campo PK que no insert ele gerar o código como o exemplo "anomesdiaesequencia" = 20130822001.
at,
-
David,
Este tipo de coluna o SQL Server não dispõe. Terás que que fazer alguma coisa customizada pela sua aplicação. Até a versão 2008 R2 o SQL Server tem como auto incremento o identity.
Você até pode fazer este contador via sql server , talvez utilizando uma trigger para tratar os dados antes de inserir na tabela, o que não seria muito performático. O problema é como você fará para controlar o incremento.
Sugiro tratar com chave composta da forma que mencionei acima. Assim todo controle de incremento fica a cargo do SQL Server. Se você fizer algo customizado, terás que fazer um controle pesado por transação para que duas transações nao peguem os mesmos ids.
"Se a resposta foi útil, não esqueça de marcar a resposta."
Roberto GalvãoMCITP - Administration SQL Server 2008MCITP - Developer SQL Server 2008MCSA - SQL Server 2012
Roberto Galvão | MCTS | MCITP | Microsoft Partner |
- Editado Roberto Galvão quinta-feira, 22 de agosto de 2013 19:54