2

Мне нужно скопировать данные в таблицу базы данных MSSQLServer 2005, которая имеет столбец идентификатора.Как установить параметр IDENTITY_INSERT для JDBC PreparedStatement?

Я видел, как отключить столбец идентификаторов, выполнив

SET IDENTITY_INSERT <table> ON 

перед вставкой запросов.

Как это сделать, когда я использую PreparedStatements для пакетных вставок, и я не могу изменить оператор во время операции?

ответ

2

D'oh. Легко, понял, думаю.

Сначала создайте заявление, выполните SET IDENTITY_INSERT ON. Закрыть заявление.

Создайте подготовленное состояние, сделайте партию, закройте подготовленное состояние.

Создайте заявление, выполните SET IDENTITY_INSERT OFF. Закрыть и убрать.

Добро пожаловать любые уточнения или советы по вопросам, с этим ...

+0

Пэт urself на спине :) –

+0

Вы должны быть в состоянии сделать это в рамках одного подготовленного заявления, вы просто должны разделите линии. – Yishai

2

Вы можете включить SET IDENTITY_INSERT ON/OFF как часть подготовленного заявления. Таким образом, вы выполняете только одну команду с точки зрения клиента.

+0

Спасибо, но как? Скажем, у меня есть: INSERT INTO NAMES_TABLE (id, name) VALUES (?,?) Который я хочу использовать addBatch, чтобы делать много вставок быстро. Как мне изменить это, чтобы сделать часть SET ...? – Brabster

1

@Brabster Несколько лет спустя, но это может быть полезно для всех, кто должен сделать что-то подобное. Вы можете установить identity_inserton и off с каскадным заявлением в пределах строки вы передаете prepareStatement():

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