2

Ich muss Daten in eine MSSQLServer 2005-Datenbanktabelle kopieren, die eine Identitätsspalte hat.Wie kann ich die IDENTITY_INSERT-Option für eine JDBC PreparedStatement festlegen?

Ich habe gesehen, wie die Identität Spalte

SET IDENTITY_INSERT <table> ON 

vor den Insert-Abfragen durch die Ausführung zu deaktivieren.

Wie kann ich dies tun, wenn ich PreparedStatements für Stapeleinfügungen verwende und die Anweisung während des Vorgangs nicht ändern kann?

Antwort

2

D'oh. Einfach, habe es herausgefunden, denke ich.

Erstellen Sie zuerst eine Anweisung, führen Sie SET IDENTITY_INSERT ON aus. Schließen Sie die Anweisung.

Erstellen Sie PreparedStatement, führen Sie Batch-Aufgaben aus, schließen Sie die vorbereitete Anweisung.

Erstellen Sie eine Anweisung, führen Sie SET IDENTITY_INSERT aus. Schließen und aufräumen.

Willkommen alle Verfeinerungen oder Beratung zu Fragen mit diesem ...

+0

Pat urself auf der Rückseite :) –

+0

Sie sollten diese von einer vorbereiteten Erklärung im Rahmen der Lage zu tun, müssen Sie nur noch zu Trenne die Linien. – Yishai

2

Sie SET IDENTITY_INSERT ON/OFF als Teil der vorbereiteten Erklärung enthalten kann. Auf diese Weise führen Sie nur einen Befehl aus der Perspektive des Clients aus.

+0

Danke, aber wie? Angenommen, ich habe: INSERT IN NAMES_TABLE (ID, Name) VALUES (?,?) Welche ich verwenden möchte AddBatch, um viele Einsätze schnell zu tun. Wie würde ich das ändern, um auch den SET ... -Teil zu machen? – Brabster

1

@Brabster Ein paar Jahre zu spät, aber es kann für jeden nützlich sein, der etwas Ähnliches tun muss. Sie können Sie prepareStatement() passieren innerhalb der Zeichenfolge identity_inserton und off mit verketteten Aussagen gesetzt:

myStatement.prepareStatement("SET IDENTITY_INSERT MY_TABLE ON;INSERT INTO MY_TABLE ...;SET IDENTITY_INSERT MY_TABLE OFF"); 
Verwandte Themen