none
Trabalhando com campo de auto numeração. RRS feed

  • 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
    domingo, 22 de janeiro de 2012 17:52

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
    segunda-feira, 23 de janeiro de 2012 01:32
    Moderador

Todas as Respostas

  • Boa noite,

     

    Deixa eu ver se entendi, o que vc precisa é que ao inserir o valor no campo Data_Nasc a Idade seja calculada?

    domingo, 22 de janeiro de 2012 23:26
  • 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
    segunda-feira, 23 de janeiro de 2012 01:32
    Moderador
  • Roberto,

    Muito obrigado, resolveu o meu problema

    quarta-feira, 25 de janeiro de 2012 00:48