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.
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.
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))
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
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.
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
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