> On Aug. 5, 2014, 7:27 p.m., Abraham Elmahrek wrote:
> > src/java/org/apache/sqoop/mapreduce/SQLServerExportDBExecThread.java, line
> > 128
> > <https://reviews.apache.org/r/24242/diff/1/?file=650524#file650524line128>
> >
> > Should this have a semicolon at the end of it?
> >
> > Also, does it make any sense to separate this out into its own
> > statement?
>
> Keegan Witt wrote:
> I'm not sure I follow. If I add a semicolon, this will be two statements
> in a single PreparedStatement (which shouldn't be done). I'd be OK breaking
> them into separate PreparedStatements, but I didn't see where that would be
> done. The AsyncSqlRecordWriter interface just has getPreparedStatement()
> which returns a single PreparedStatement, not a collection of
> PreparedStatements to run. What am I missing?
>
> Abraham Elmahrek wrote:
> Good points.
>
> It seems like there is a "configureConnection" method that can be
> overriden in the parent class "SQLServerAsyncDBExecThread". Would that work?
>
> Keegan Witt wrote:
> This could work if you could tell SQL Sever through a connection
> parameter passed to SQLServerDriver or some property set on
> SQLServerConnection, but I didn't see a method that would do that.
> Suggestions?
>
> Abraham Elmahrek wrote:
> You should be able to use separate statements. For example:
> #1 Statement that executes: SET IDENTITY_INSERT ON
> #2 Close statement
> #3 Prepared Statement that executes batch stuff.
> ...
>
> If the above doesn't work, then the solution you have is fine.
It didn't seem to work when I tested it as separate statements. I'm not sure
why; I would have thought the same JDBC connection would have meant the same
SQL Server session. Just to be sure my test was fair, here's what I tried in
my GroovyConsole:
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")
def conn = DriverManager.getConnection("jdbc:sqlserver:// ..."))
conn.prepareStatement("SET IDENTITY_INSERT [testTable] ON").execute()
conn.prepareStatement("INSERT INTO [testTable] (k, v) VALUES (1, 1)").execute()
Thanks for asking about this though, it is a valid concern to want to do this
once rather than as part of every batch query.
- Keegan
-----------------------------------------------------------
This is an automatically generated e-mail. To reply, visit:
https://reviews.apache.org/r/24242/#review49657
-----------------------------------------------------------
On Aug. 4, 2014, 1:48 p.m., Keegan Witt wrote:
>
> -----------------------------------------------------------
> This is an automatically generated e-mail. To reply, visit:
> https://reviews.apache.org/r/24242/
> -----------------------------------------------------------
>
> (Updated Aug. 4, 2014, 1:48 p.m.)
>
>
> Review request for Sqoop.
>
>
> Repository: sqoop-trunk
>
>
> Description
> -------
>
> Adds an extra arg for SQL Server that runs SET IDENTITY_INSERT <table> ON
> before exporting the data.
>
>
> Diffs
> -----
>
> src/docs/user/connectors.txt bba946a
> src/java/org/apache/sqoop/manager/SQLServerManager.java 534c0cc
> src/java/org/apache/sqoop/mapreduce/SQLServerExportDBExecThread.java
> 1810ba8
>
> src/java/org/apache/sqoop/mapreduce/sqlserver/SqlServerExportBatchOutputFormat.java
> cc69d77
>
> Diff: https://reviews.apache.org/r/24242/diff/
>
>
> Testing
> -------
>
> Tested that change enables inserts on tables with identity (with SQL Server
> 2005).
>
>
> Thanks,
>
> Keegan Witt
>
>