SQL: Wird IDENTITY_INSERT ON deaktiviert, um die Identitätstabelle der Tabelle zu aktualisieren?

Ich arbeite derzeit an einem datamigrationsprojekt und bei leistungsbezogenen Problemen, ich möchte eine Reihe von Identitäten vordefinieren und dann die Tabellen dann selbst erstellen lassen.

Ich fand es nicht einfach, die identity einer Spalte hinzuzufügen, also möchte ich die IDENTITY_INSERT ON statement verwenden.

Meine Frage ist: würde dies deaktivieren Updates auf die Tabelle Identitätstabelle (die Auswirkungen auf die performance), oder muss ich wirklich entfernen Sie die identity Eigentum der Spalte (s)?

Es ist sehr häufig für data-Migration Skripte, um so etwas wie:

 SET IDENTITY_INSERT [MyTable] ON INSERT INTO [MyTable] ... INSERT INTO [MyTable] ... INSERT INTO [MyTable] ... ... SET IDENTITY_INSERT [MyTable] OFF 

Während der Aktivierung wird das Feld für andere Einsätze nicht automatisch erhöht.

IDENTITY_INSERT hat sessionsumfang, so dass nur Ihre session in der Lage ist, in die Identitätszeile explizit einzufügen. UND nur eine Tabelle in einer session kann IDENTITY_INSERT ON auf einmal haben.

Also was ist mit der performance? Ich habe eigentlich keine Antwort auf Sie Frage, aber ich habe einige Code, der Ihnen eine Antwort geben sollte. Es ist eine modifizierte Version von etwas, was ich hier gefunden habe :

 /* Create a table with an identity value */ CREATE TABLE test_table ( auto_id INT IDENTITY(1, 1), somedata VARCHAR(50) ) GO /* Insert 10 sample rows */ INSERT INTO test_table SELECT 'x' GO 10 /* Get the current identity value (10) */ SELECT Ident_current('test_table') AS IdentityValueAfterTenInserts GO /* Disable the identity column, insert a row, enable the identity column. */ SET identity_insert test_table ON INSERT INTO test_table(auto_id, somedata) SELECT 50, 'x' SET identity_insert test_table OFF GO /* Get the current identity value (50) */ SELECT Ident_current('test_table') AS IdentityValueAfterIdentityInsertWithIdentityEnabled GO /* Disable the identity column, insert a row, check the value, then enable the identity column. */ SET identity_insert test_table ON INSERT INTO test_table(auto_id, somedata) SELECT 100, 'x' /* Get the current identity value (?) If the value is 50, then the identity column is only recalculated when a call is made to: SET identity_insert test_table OFF Else if the value is 100, then the identity column is recalculated constantly and your performance problems remain. */ SELECT Ident_current('test_table') AS IdentityValueAfterIdentityInsertWithIdentityDisabled SET identity_insert test_table OFF GO /* Get the current identity value (100) */ SELECT Ident_current('test_table') AS IdentityValueAfterIdentityInsertWithIdentityEnabled GO DROP TABLE test_table 

Ich habe keine SQL-SERVER praktisch, um dies zu laufen, also lass mich wissen, wie es geht. Ich hoffe es hilft.