Pergunta

Eu quero fazer uma tabela em SqlServer que vai acrescentar, na inserção, um auto incrementado chave primária. Este deve ser um id autoincremented semelhante à funcionalidade auto_increment MySql. (Abaixo)

create table foo  
(  
user_id int not null auto_increment,  
name varchar(50)  
)  

Existe uma maneira de fazer isso com a criação de um disparador de inserção?

Foi útil?

Solução

Como este

create table foo  
(  
user_id int not null identity,  
name varchar(50)  
)

Outras dicas

OP pediu uma auto incrementado chave primária. A palavra-chave identidade não, por si só, fazer uma coluna de ser a chave primária.

CREATE TABLE user
(
  TheKey int IDENTITY(1,1) PRIMARY KEY,
  Name varchar(50)
)

Eles têm respondido à sua pergunta, mas eu quero adicionar um pouco de conselho para alguém novo para usando colunas de identidade. Há momentos em que você tem que devolver o valor da identidade acabou de inserir de modo que você pode inserir em uma tabela relacionada. Muitas fontes irá dizer-lhe para usar @@ identidade para obter este valor. Sob nenhuma circunstância você deve sempre usar @@ identidade se você quiser mantain integridade dos dados. Ele lhe dará a identidade criada em um gatilho, se um deles é adicionado a inserção para outra mesa. Desde que você não pode garantir o valor de @@ identidade será sempre correto, o melhor é nunca use @@ identidade. Use SCOPE_IDENTITY () para obter este valor em seu lugar. Eu sei que isto é um pouco fora do tópico, mas é importante para a sua compreensão de como usar a identidade com o SQL Server. E confiem em mim, você não quer ser a fixação de um problema dos registros relacionados com o valor de identidade errada alimentado a eles. Isso é algo que pode tranquilamente dar errado durante meses antes de ser dicovered e é quase impossível de corrigir os dados depois.

Como já foi mencionado:. Adicionar o atributo IDENTITY para a coluna, e torná-lo uma chave primária

Há, no entanto, as diferenças entre a identidade de MSSQL e AUTO_INCREMENT do MySQL:

  • MySQL exige que um único restrição (frequentemente sob a forma de um chave primária) ser definida para o não AUTO_INCREMENT coluna.
    MSSQL não tem esse requisito.
  • MySQL permite que você manualmente inserir valores em uma coluna AUTO_INCREMENT.
    MSSQL impede que você inserir manualmente um valor em uma identidade coluna; se necessário, você pode substituir isso emitindo um "SET IDENTITY_INSERT nome da tabela ON" comando antes da inserção.
  • MySQL permite que você atualizar valores em uma coluna AUTO_INCREMENT.
    MSSQL se recusa a atualizar valores em uma IDENTIDADE coluna.

Apenas defina o campo como um campo de identidade .

declarar o campo para ser identidade

Como recomendado acima, use um campo de identidade.

CREATE TABLE foo
(
user_id int IDENTITY(1,1) NOT NULL,
name varchar(50)
)

Como já foi dito, basta configurar a opção de Identidade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top