diff --git a/lib/active_record/connection_adapters/sqlserver/database_statements.rb b/lib/active_record/connection_adapters/sqlserver/database_statements.rb
index bac9e5441..4aee1e1a2 100644
--- a/lib/active_record/connection_adapters/sqlserver/database_statements.rb
+++ b/lib/active_record/connection_adapters/sqlserver/database_statements.rb
@@ -17,9 +17,6 @@ def perform_query(raw_connection, sql, binds, type_casted_binds, prepare:, notif
           id_insert_table_name = query_requires_identity_insert?(sql)
 
           result, affected_rows = if id_insert_table_name
-            # If the table name is a view, we need to get the base table name for enabling identity insert.
-            id_insert_table_name = view_table_name(id_insert_table_name) if view_exists?(id_insert_table_name)
-
             with_identity_insert_enabled(id_insert_table_name, raw_connection) do
               internal_exec_sql_query(sql, raw_connection)
             end
@@ -264,11 +261,14 @@ def execute_procedure(proc_name, *variables)
         end
 
         def with_identity_insert_enabled(table_name, conn)
-          table_name = quote_table_name(table_name)
-          set_identity_insert(table_name, conn, true)
+          # If the table name is a view, we need to get the base table name for enabling identity insert.
+          table_name = view_table_name(table_name) if view_exists?(table_name)
+          quoted_table_name = quote_table_name(table_name)
+
+          set_identity_insert(quoted_table_name, conn, true)
           yield
         ensure
-          set_identity_insert(table_name, conn, false)
+          set_identity_insert(quoted_table_name, conn, false)
         end
 
         def use_database(database = nil)
diff --git a/test/cases/view_test_sqlserver.rb b/test/cases/view_test_sqlserver.rb
index 88d195750..ed5d2303c 100644
--- a/test/cases/view_test_sqlserver.rb
+++ b/test/cases/view_test_sqlserver.rb
@@ -53,10 +53,16 @@ class ViewTestSQLServer < ActiveRecord::TestCase
   end
 
   describe "identity insert" do
-    it "identity insert works with views" do
-      assert_difference("SSTestCustomersView.count", 1) do
+    it "creates table record through a view" do
+      assert_difference("SSTestCustomersView.count", 2) do
         SSTestCustomersView.create!(id: 5, name: "Bob")
+        SSTestCustomersView.create!(id: 6, name: "Tim")
       end
     end
+
+    it "creates table records through a view using fixtures" do
+      ActiveRecord::FixtureSet.create_fixtures(File.join(ARTest::SQLServer.test_root_sqlserver, "fixtures"), ["sst_customers_view"])
+      assert_equal SSTestCustomersView.all.count, 2
+    end
   end
 end
diff --git a/test/fixtures/sst_customers_view.yml b/test/fixtures/sst_customers_view.yml
new file mode 100644
index 000000000..668ba3763
--- /dev/null
+++ b/test/fixtures/sst_customers_view.yml
@@ -0,0 +1,6 @@
+david:
+  name: "David"
+  balance: 2,004
+aidan:
+  name: "Aidan"
+  balance: 10,191