Usuário com melhor resposta
Duvida em sequenciar campo - Sql Server

Pergunta
-
Bom Dia a Todos
estou criando um banco de dados em sql server 2008
e pintou ai um duvida ao sequenciar um campo ex: campo cod_id
eu não posso usar ele como um IDENTITY
porem preciso sequencia-lo de forma que posso ordena a ordem de qual numeração ele irá começaisso é possível de ser executado?
der de já agradeço pela atenção de todos
Respostas
-
Rhael,
você pode alterar a sequência de um campo identity e também pode desabilitá-lo para fazer inserções avulsas e depois habilitá-lo novamente.
Permite explicitar valores a serem inseridos em coluna indentity de uma tabela.
DBCC CHECKIDENT (Transact-SQL)
Verifica o valor de identidade atual da tabela especificada no SQL Server e, se necessário, altera o valor da identidade. Você também pode usar DBCC CHECKIDENT para definir manualmente um novo valor de identidade atual para a coluna de identidade.
Antero Marques
- Editado Antero Marques terça-feira, 8 de março de 2016 14:50
- Sugerido como Resposta Fulvio Cezar Canducci Dias terça-feira, 8 de março de 2016 15:15
- Marcado como Resposta Rhael_Andrade terça-feira, 8 de março de 2016 16:20
-
Rhael,
Veja se este exemplo te ajuda:
Declare @Identity Int ---Refazendo numeração Controle de Entrada - Matéria Prima --- Set @Identity=(Select Ident_Current('CTEntrada')) DBCC CheckIdent('CTEntrada_PQC',Reseed,@Identity) Go
Ou este outro:
--Resentando o valor Identity DBCC CHECKIDENT ('CTEntrada', RESEED, 245) --Exibindo o valor Identity DBCC CHECKIDENT ('CTEntrada', NORESEED)
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Rhael_Andrade terça-feira, 8 de março de 2016 16:20
Todas as Respostas
-
-
-
-
Vamos supor que tenho um banco de dados chamado BD_Sql
no banco sql tenho uma tabela com o campo primário conforme vc falou certo
so que amanha apareceu um banco de dados que preciso migra os dados dele para o BD_Sql certose o campo for primário eu não consigo fazer com que os código dos cliente seja o msm do banco que foi migrado
por isso tenho que ter um sequenciador para que eu possa alterar a sequencia manualmente -
Rhael,
você pode alterar a sequência de um campo identity e também pode desabilitá-lo para fazer inserções avulsas e depois habilitá-lo novamente.
Permite explicitar valores a serem inseridos em coluna indentity de uma tabela.
DBCC CHECKIDENT (Transact-SQL)
Verifica o valor de identidade atual da tabela especificada no SQL Server e, se necessário, altera o valor da identidade. Você também pode usar DBCC CHECKIDENT para definir manualmente um novo valor de identidade atual para a coluna de identidade.
Antero Marques
- Editado Antero Marques terça-feira, 8 de março de 2016 14:50
- Sugerido como Resposta Fulvio Cezar Canducci Dias terça-feira, 8 de março de 2016 15:15
- Marcado como Resposta Rhael_Andrade terça-feira, 8 de março de 2016 16:20
-
Vamos supor que tenho um banco de dados chamado BD_Sql
no banco sql tenho uma tabela com o campo primário conforme vc falou certo
so que amanha apareceu um banco de dados que preciso migra os dados dele para o BD_Sql certose o campo for primário eu não consigo fazer com que os código dos cliente seja o msm do banco que foi migrado
por isso tenho que ter um sequenciador para que eu possa alterar a sequencia manualmenteFoi explicado melhor agora!
E a resposta do nosso amigo Antero Marques resume o que precisa!
Fulvio C
-
Rhael,
Veja se este exemplo te ajuda:
Declare @Identity Int ---Refazendo numeração Controle de Entrada - Matéria Prima --- Set @Identity=(Select Ident_Current('CTEntrada')) DBCC CheckIdent('CTEntrada_PQC',Reseed,@Identity) Go
Ou este outro:
--Resentando o valor Identity DBCC CHECKIDENT ('CTEntrada', RESEED, 245) --Exibindo o valor Identity DBCC CHECKIDENT ('CTEntrada', NORESEED)
Pedro Antonio Galvao Junior [MVP | MCC | Microsoft Evangelist | Microsoft Partner | Engenheiro de Softwares | Especialista em Banco de Dados | Professor Universitario | SoroCodigos | @JuniorGalvaoMVP | http://pedrogalvaojunior.wordpress.com]
- Marcado como Resposta Rhael_Andrade terça-feira, 8 de março de 2016 16:20
-
Sugestão,
Crie a seguinte tabela TABSEQ, nela vc. irá criar sua sequencia utilizando a coluna "CHAVE", inclusive vc. poderá altera-la via programa caso precise.
CREATE TABLE dbo.TABSEQ ( ID int IDENTITY(1, 1) NOT NULL, CHAVE int NULL, PRIMARY KEY CLUSTERED (ID) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) ON [PRIMARY] GO
Agora criei uma tabela de exemplo p/ vc. a TABTESTE, note que a primary key dela não é "identity"
CREATE TABLE dbo.TABTESTE ( ID int NOT NULL, DETALHE char(30) COLLATE SQL_Latin1_General_CP1_CI_AS NULL, PRIMARY KEY CLUSTERED (ID) WITH ( PAD_INDEX = OFF, IGNORE_DUP_KEY = OFF, STATISTICS_NORECOMPUTE = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ) ON [PRIMARY] GO
Agora crie uma storeprocedure, a ideia aqui é ao incluir seu registro, acessar a tabela TABSEQ, pegar o valor de CHAVE, incrementa-lo com 1 e inserir como ID na tabela TABTESTE.
Só um detalhe, no final do insert precisa fazer um update na tabela TABSEQ atualizando a coluna CHAVE.
Acho q é isso que vc. pediu... boa sorteSET ANSI_NULLS ON SET QUOTED_IDENTIFIER ON GO CREATE PROCEDURE dbo.InsereTabTest @DETALHE CHAR(30) AS BEGIN INSERT INTO TABTESTE (ID, DETALHE) SELECT (CHAVE + 1), @DETALHE FROM TABSEQ WHERE ID = 1
update TABSEQ SET CHAVE = A.ID
FROM (
SELECT MAX(ID) ID FROM TABTESTE
) A
WHERE
TABSEQ.ID = 1END
- Editado Julio Cesar Marques Pires terça-feira, 8 de março de 2016 17:15 Complementação do código
- Sugerido como Resposta Julio Cesar Marques Pires terça-feira, 8 de março de 2016 18:04