2017-02-20 1 views
-1

J'ai un travail qui a besoin de mettre à jour une table une fois par jour à l'aide: -MSSQL 2008 SET INSERT identité sur la base de données en direct

SET IDENTITY INSERT ON

. Cependant en même temps d'autres utilisateurs utilisent cette base de données en direct et en insérant des enregistrements et cela doit être fait en utilisant SET IDENTITY INSERT OFF.

Existe-t-il un moyen d'exécuter le travail tout en permettant aux utilisateurs d'insérer des enregistrements?

+0

N'est-ce pas l'inverse? Le jub ne nécessite-t-il pas d'insérer l'identité de l'insert alors que l'utilisateur l'exige pour être éteint? –

+0

Vous avez raison. Le travail nécessite l'insertion d'une identité alors que les transactions en cours nécessitent une insertion d'identité OFF. – user1480192

+0

"Le travail requiert l'insertion d'identité ON alors que les transactions en cours requièrent l'insertion d'identité OFF" - c'est un peu bizarre –

Répondre

0

Il n'y a pas de problème pour cela.

La portée de réglage INSERT IDENTITY est session,

donc si vous avez utilisé le code suivant:

SET IDENTITY_INSERT TableName ON 
Insert statement ... 

autres utilisateurs signifie d'autres sessions, donc s'ils essaient d'insérer l'identité, ils auront la prochaine erreur: -

Cannot insert explicit value for identity column in table 'TableName' when IDENTITY_INSERT is set to OFF.

De MSDN: -

At any time, only one table in a session can have the IDENTITY_INSERT property set to ON. If a table already has this property set to ON, and a SET IDENTITY_INSERT ON statement is issued for another table, SQL Server returns an error message that states SET IDENTITY_INSERT is already ON and reports the table it is set ON for.

+0

Certains utilisateurs peuvent donc accéder à la table en utilisant Identity_Insert ON alors que d'autres peuvent accéder à la même table en utilisant identity_insert_off? – user1480192

+0

Oui, en tant que MSDN nous a dit, sa portée est la session. –

+0

s'il vous plaît utiliser la séquence dans votre cas. –