@@ -13,8 +13,8 @@ def select_rows(sql, name = nil)
1313 end
1414
1515 def execute ( sql , name = nil , skip_logging = false )
16- if table_name = query_requires_identity_insert? ( sql )
17- with_identity_insert_enabled ( table_name ) { do_execute ( sql , name ) }
16+ if id_insert_table_name = query_requires_identity_insert? ( sql )
17+ with_identity_insert_enabled ( id_insert_table_name ) { do_execute ( sql , name ) }
1818 else
1919 do_execute ( sql , name )
2020 end
@@ -187,12 +187,24 @@ def select(sql, name = nil)
187187 end
188188
189189 def insert_sql ( sql , name = nil , pk = nil , id_value = nil , sequence_name = nil )
190- super || select_value ( "SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident" )
190+ @insert_sql = true
191+ case @connection_options [ :mode ]
192+ when :dblib
193+ execute ( sql , name ) || id_value
194+ else
195+ super || select_value ( "SELECT CAST(SCOPE_IDENTITY() AS bigint) AS Ident" )
196+ end
191197 end
192198
193199 def update_sql ( sql , name = nil )
194- execute ( sql , name )
195- select_value ( 'SELECT @@ROWCOUNT AS AffectedRows' )
200+ @update_sql = true
201+ case @connection_options [ :mode ]
202+ when :dblib
203+ execute ( sql , name )
204+ else
205+ execute ( sql , name )
206+ select_value ( 'SELECT @@ROWCOUNT AS AffectedRows' )
207+ end
196208 end
197209
198210 # === SQLServer Specific ======================================== #
@@ -213,12 +225,15 @@ def do_execute(sql, name = nil)
213225 def raw_connection_do ( sql )
214226 case @connection_options [ :mode ]
215227 when :dblib
216- @connection . execute ( sql ) . do
228+ @insert_sql ? @connection . execute ( sql ) . insert : @ connection. execute ( sql ) . do
217229 when :odbc
218230 @connection . do ( sql )
219231 else :adonet
220232 @connection . create_command . tap { |cmd | cmd . command_text = sql } . execute_non_query
221233 end
234+ ensure
235+ @insert_sql = false
236+ @update_sql = false
222237 end
223238
224239 # === SQLServer Specific (Selecting) ============================ #
0 commit comments