Usuário com melhor resposta
Trabalhando com campo de auto numeração.

Pergunta
-
Ola,
Estou com um problema em uma tabela.
Codigo da estrutura:
CREATE TABLE CLIENTESo
(
ID INT IDENTITY(10,11),
Nome VARCHAR(15) NOT NULL,
Sobrenome VARCHAR(30) NOT NULL,
CPF CHAR(11) NULL UNIQUE,
RG CHAR(10) NOT NULL UNIQUE,
Data_Nasc DATE NOT NULL,
Idade TINYINT,
Sexo CHAR(1),
Data_Cad DATE NOT NULL, --DATA DO CADASTRO NO SISTEMA
CONSTRAINT PK_CLIENTES PRIMARY KEY (ID),
);Meu problema é:
Eu quero que o campo Idade seja alto numerico (como um campo IDENTITY), só que
o valor do campo idade é resultado de Data_Nasc - GETDATE().
- Editado Killandyou domingo, 22 de janeiro de 2012 18:02
Respostas
-
Killandyou,
Segue abaixo um exemplo de como você pode resolver o seu problema. Este tipo de solução utiliza uma funcionalidade do SQL Server chamada Coluna Computada, onde ao invés de informar um tipo de dado, você especifica uma fórmula que dá o resultado desejado. Eu escolhi medir a idade em anos, mas você pode calcular em meses, dias, semanas... apenas mudando o "year" pelo intervalo desejado (Veja no Books Online sobre a função DATEDIFF).
Uma das coisas que quero te comentar é que não é normal que isso seja feito no banco de dados. Fica muito mais simples fazer na aplicação, mas, enfim, não quero entrar nessa discussão porque não conheço sua necessidade. Deixo aqui a sugestão que você analise bem se é isso mesmo que deseja fazer.
DROP TABLE CLIENTESo CREATE TABLE CLIENTESo ( ID INT IDENTITY(10,11), Nome VARCHAR(15) NOT NULL, Sobrenome VARCHAR(30) NOT NULL, CPF CHAR(11) NULL UNIQUE, RG CHAR(10) NOT NULL UNIQUE, Data_Nasc DATE NOT NULL, Idade AS DATEDIFF(Year, DATA_NASC, GETDATE()), Sexo CHAR(1), Data_Cad DATE NOT NULL, --DATA DO CADASTRO NO SISTEMA CONSTRAINT PK_CLIENTES PRIMARY KEY (ID), ); INSERT INTO CLIENTESo (Nome, Sobrenome, CPF, RG, Data_Nasc, Sexo, Data_Cad) VALUES ('Roberto', 'Fonseca', '12345678900', '123456', '1987-01-01', 'M', GETDATE()) SELECT * FROM dbo.ClientesO
Espero ter ajudado.
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008- Marcado como Resposta Harley Araujo terça-feira, 24 de janeiro de 2012 12:28
Todas as Respostas
-
-
Killandyou,
Segue abaixo um exemplo de como você pode resolver o seu problema. Este tipo de solução utiliza uma funcionalidade do SQL Server chamada Coluna Computada, onde ao invés de informar um tipo de dado, você especifica uma fórmula que dá o resultado desejado. Eu escolhi medir a idade em anos, mas você pode calcular em meses, dias, semanas... apenas mudando o "year" pelo intervalo desejado (Veja no Books Online sobre a função DATEDIFF).
Uma das coisas que quero te comentar é que não é normal que isso seja feito no banco de dados. Fica muito mais simples fazer na aplicação, mas, enfim, não quero entrar nessa discussão porque não conheço sua necessidade. Deixo aqui a sugestão que você analise bem se é isso mesmo que deseja fazer.
DROP TABLE CLIENTESo CREATE TABLE CLIENTESo ( ID INT IDENTITY(10,11), Nome VARCHAR(15) NOT NULL, Sobrenome VARCHAR(30) NOT NULL, CPF CHAR(11) NULL UNIQUE, RG CHAR(10) NOT NULL UNIQUE, Data_Nasc DATE NOT NULL, Idade AS DATEDIFF(Year, DATA_NASC, GETDATE()), Sexo CHAR(1), Data_Cad DATE NOT NULL, --DATA DO CADASTRO NO SISTEMA CONSTRAINT PK_CLIENTES PRIMARY KEY (ID), ); INSERT INTO CLIENTESo (Nome, Sobrenome, CPF, RG, Data_Nasc, Sexo, Data_Cad) VALUES ('Roberto', 'Fonseca', '12345678900', '123456', '1987-01-01', 'M', GETDATE()) SELECT * FROM dbo.ClientesO
Espero ter ajudado.
Roberto Fonseca MCT / MCITP - Database Administrator 2008 MCITP - Database Developer 2008 MCITP - Business Intelligence 2008- Marcado como Resposta Harley Araujo terça-feira, 24 de janeiro de 2012 12:28
-