2

J'ai besoin de copier des données dans une table de base de données MSSQLServer 2005 qui a une colonne d'identité.Comment puis-je définir l'option IDENTITY_INSERT pour un PreparedStatement JDBC?

J'ai vu comment désactiver la colonne d'identité en exécutant

SET IDENTITY_INSERT <table> ON 

avant que les requêtes d'insertion.

Comment est-ce que je peux faire ceci quand j'emploie PreparedStatements pour faire des insertions par lots et je ne peux pas changer l'instruction pendant l'opération?

Répondre

2

D'oh. Facile, compris je pense.

Créez d'abord une instruction, exécutez SET IDENTITY_INSERT ON. Déclaration Close.

Créer PreparedStatement, faire des tâches par lots, fermer l'état préparé.

Créez une instruction, exécutez SET IDENTITY_INSERT OFF. Fermez et ranger.

Bienvenue toute modification ou des conseils sur les questions de ce ...

+0

Pat urself sur le dos :) –

+0

Vous devriez être en mesure de le faire dans le cadre d'une déclaration préparée, il vous suffit de séparer les lignes. – Yishai

2

Vous pouvez inclure SET IDENTITY_INSERT ON/OFF dans le cadre de la déclaration préparée. De cette façon, vous exécutez seulement une commande du point de vue du client.

+0

Merci, mais comment? Dire que j'ai: INSERT INTO NAMES_TABLE (id, nom) VALEURS (?,?) Ce que je veux utiliser addBatch pour faire beaucoup d'insertions rapidement. Comment est-ce que je modifierais ceci pour faire la partie SET ... aussi? – Brabster

1

@Brabster Quelques années en retard, mais il peut être utile à quiconque a besoin de faire quelque chose de similaire. Vous pouvez définir identity_inserton et off avec des déclarations concaténés dans la chaîne que vous passez à prepareStatement():

myStatement.prepareStatement("SET IDENTITY_INSERT MY_TABLE ON;INSERT INTO MY_TABLE ...;SET IDENTITY_INSERT MY_TABLE OFF"); 
Questions connexes