none
Duvida SQL RRS feed

  • Pergunta

  • Boa tarde eu queria fazer uma Store procedure para criar uma requisição...
    com os seguintes campos...

    cod_requisicao int Unchecked
    data datetime Unchecked
    cod_estado int Checked
    cod_ofical_requisitante int Checked
    cod_tipo_mat_con int Checked
    tipo nvarchar(20) Checked
    cod_classe int Checked


    Nessa SP queria adicionar 1 a 1 tipo o identity.. por exemplo no 1º registo ele metia 1 e depois nas seguintes verificava o ultimo registo k era o 1 e depois metia a 2... e tambem queria fazer com o data por exemplo no ano 2010 podia ter o codigo de requesicao de 1 a 30.. e qd chegar a outro ano começava do 1 outra vez..  e possivel sera mais facil utilizar o scope_identity() ?

     

    Cumprimentos, Obrigado

    terça-feira, 24 de agosto de 2010 09:53

Todas as Respostas

  • Castelo,

    Sua duvida esta um pouco confusa, ainda não entendi muito bem sua necessidade poderia exemplificar ou tentar explicar de uma outra maneira?

    att.
    Marcelo Fernandes


    MCP, MCDBA, MCSA, MCTS.
    Se útil, classifique!!!
    Me siga no twitter: @marcelodba
    terça-feira, 24 de agosto de 2010 12:00
  • cod_requisicao int Unchecked
    data datetime Unchecked
    cod_estado int Checked
    cod_ofical_requisitante int Checked
    cod_tipo_mat_con int Checked
    tipo nvarchar(20) Checked
    cod_classe int Checked

     

    tenho esse campos todos na tabela de requisicao

    as chaves primarias e o cod_requisicao e a data, porque quando fizer uma inserir uma requisicao quero que va acrescentado 1 a 1 no cod_requisicao

    faço 2 requisiçoes

    cod_requisicao fika 1

    e na segunda requisicao fica a 2, faz o que o IDENTITY (1,1) incrementa, o meu problema e quando passar de ano queria que começa-se do 1 por exemplo no ano 2010 havia do 1 ao 50 requisicoes e quando fosse para o ano 2011 começa do 1 o cod de requisicao :P

    Cumprimentos. deu para perceber? sou uma beca confuso :P

     

    Obrigado pela a ajuda

    terça-feira, 24 de agosto de 2010 21:23
  • Castelo,

    Vamos por partes:

    Em relação ao uso do Identity, ele é muito simples de ser implementado, basta você definir o campo que será responsável em gerar a numeração e conforme os registros estão sendo inseridos o próprio Identity vai gerando a numeração, veja o código de exemplo abaixo:

    Create Table #TB_Numeracao

    (Codigo Int Identity(1,1),

     Descricao Varchar(10) Default 'Registros')

    Insert Into #TB_Numeracao Default values

    Go 10

     

    Rode este código e veja o resultado, agora sobre a sua Stored Procedure, quais são as dificuldades.

    Outro detalhe, em relação numeração do Identity, uma vez eu precisei fazer a mesmo coisa que você na virada do ano o identity deveria ser reiniciado, então eu configurei um Job que era executado na virada do ano e realiza a alteração no numeração através do comando DBCC CheckIdent.


    Pedro Antonio Galvão Junior [MVP | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | SorBR.Net | Professor Universitário]
    quarta-feira, 25 de agosto de 2010 13:06
  • Sim com isso =P consigo fazer a requisição, depois ñão consigo e meter a numeração do inicio andei a pesquisar esse "comando DBCC CheckIdent." n percebi bem o que ele faz, podias dar-me um exemplo.

     

    Pelo o que percebi faço 4 registos e ao apagar o 1 e o 2, ele com essa função vai criar o 1 e o 2 outra vez.. mas sou eu que tenho k dar os valores correcto?

    por exemplo

    essa tabela tem

    tb_tipo_equipamento

    cod_TipoEquipamento

    nome

    insert

     

    into tb_tipo_equipamento(nome)

     

    values (@nome)

    assim como criei a tabela com o identity faz 1 a 1. com essa opção tenho que meter o numero que falta a mao? por exemplo tendo 4 registo e apagando o 2, e para criar novamente tenho que activar a opção correcto?

    "SET IDENTITY_INSERT #TbIdentity ON"

     mas como fazer isso automatico numa SP ?

    insert into tb_tipo_equipamento(cod_TipoEquipamento,nome)

    values (2,@nome)

    quarta-feira, 25 de agosto de 2010 14:14
  • por exemplo nessa SP minha como meter essa opção cumprimentos.

    alter

     

    procedure CriarTipoEquipamento

    (

    @nome

    nvarchar(50),

    @out

    int OUTPUT

    )

    as

    BEGIN

     

    TRANSACTION

     

    if not exists(select nome from tb_tipo_equipamento where nome = @nome)

     

    begin

     

    insert into tb_tipo_equipamento(nome)

     

    values (@nome)

     

    set @out = 1

     

    IF @@ERROR <> 0 ROLLBACK TRANSACTION

     

     

    ELSE

     

    COMMIT

     

    END

     

    ELSE

     

    BEGIN

     

    set @out = 2

     

    ROLLBACK TRANSACTION

     

    END

    quarta-feira, 25 de agosto de 2010 14:19