Como activar e desactivar a inserção de identidade com o SQL Server 2008?

porque é que estou a ter um erro ao fazer uma inserção quando IDENTITY_INSERT está programada para disparar?

Como é que o ligo correctamente no servidor SQL 2008? É usando o SQL Server Management Studio?

fiz esta pesquisa:

SET IDENTITY_INSERT Database. dbo. Baskets ON

Então eu recebi a mensagem de volta na consola que o(s) Comando (S) terminou com sucesso. No entanto, quando eu executar a aplicação, ele ainda me dá o erro mostrado abaixo:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
Author: SteveC, 2011-08-15

7 answers

Via SQL de acordo com MSDN

SET IDENTITY_INSERT sometableWithIdentity ON

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF

A mensagem de erro completa diz-lhe exactamente o que se passa...

Não é possível inserir um valor explícito para a coluna da identidade no quadro 'sometable withidentity' quando a IDENTITY_ insert for activada.

 573
Author: gbn, 2017-07-04 16:06:16

Tive um problema em que não me permitiu inseri-lo mesmo depois de ter colocado o IDENTITY_INSERT ligado.

O problema era que eu não especificei os nomes das colunas e por alguma razão não gostou.

INSERT INTO tbl Values(vals)

Então basicamente faça a inserção completa nos valores de TBL(cols) (vals))

 46
Author: Ismael, 2013-02-08 14:56:38

Importação: Você deve escrever colunas em INSERT declaração

INSERT INTO TABLE
SELECT * FROM    

Não está correcto.

Insert into Table(Field1,...)
Select (Field1,...) from TABLE

Está correcto

 28
Author: R.Alonso, 2015-04-22 09:58:46
Eu sei que é um assunto mais antigo, mas encontrei isto. Se o utilizador estiver a tentar executar inserções na coluna de identidade após algum outro conjunto de sessão IDENTITY_INSERT ligado, então ele é obrigado a obter o erro acima.

A configuração do valor de inserção da identidade e os comandos DML subsequentes serão executados na mesma sessão.

Aqui o @iniciante estava a definir a inserção da identidade separadamente e, em seguida, a executar as inserções da sua aplicação. É por isso que ele tem a parte de baixo Erro:

Cannot insert explicit value for identity column in table 'Baskets' when 
IDENTITY_INSERT is set to OFF.
 1
Author: aok, 2017-04-22 07:35:08

Isto é provável quando você tem um campo de chave primária e está a inserir um valor que está a duplicar ou quando tem a bandeira de IDENTIDADA_ INSERT_ em

 0
Author: seanyp20001, 2013-11-20 14:46:50
Parece não ser necessário colocar uma base de dados IDENTITY_INSERT. dbo. Cestas ligadas; antes de cada lote SQL inserir envio. / Você pode enviar vários INSERT ... VALORES .. os comandos começaram com um conjunto IDENTITY_ insert ... On; string no início. Apenas não coloque nenhum separador de lote entre/ Não sei porque é que o IDENTITY_INSERT do SET ... Em pára de trabalhar, após o bloco de envio (para ex.: .ExecuteNonQuery () in c#)... Tive de pôr IDENTITY_INSERT... ON; novamente no início do próximo SQL linha de comando.
 -1
Author: Jettero, 2017-03-08 20:08:34

Tem de adicionar o comando 'go' depois de definir o item de identidade. Exemplo:

SET IDENTITY_INSERT sometableWithIdentity ON
go

INSERT sometableWithIdentity (IdentityColumn, col2, col3, ...)
VALUES (AnIdentityValue, col2value, col3value, ...)

SET IDENTITY_INSERT sometableWithIdentity OFF
go
 -6
Author: Bruce, 2015-04-03 06:48:36