Browse Source

Reset ident only if values were generated

Corey Taylor 4 years ago
parent
commit
adbdb9a96c

+ 3 - 1
src/Database/Schema/SqlserverSchema.php

@@ -583,7 +583,9 @@ class SqlserverSchema extends BaseSchema
             $column = $schema->getColumn($pk[0]);
             if (in_array($column['type'], ['integer', 'biginteger'])) {
                 $queries[] = sprintf(
-                    "DBCC CHECKIDENT('%s', RESEED, 0)",
+                    "IF EXISTS (SELECT * FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = '%s' AND " .
+                    "last_value IS NOT NULL) DBCC CHECKIDENT('%s', RESEED, 0)",
+                    $schema->name(),
                     $schema->name()
                 );
             }

+ 6 - 2
tests/TestCase/Database/Schema/SqlserverSchemaTest.php

@@ -1038,8 +1038,12 @@ SQL;
             ]);
         $result = $table->truncateSql($connection);
         $this->assertCount(2, $result);
-        $this->assertEquals('DELETE FROM [schema_articles]', $result[0]);
-        $this->assertEquals("DBCC CHECKIDENT('schema_articles', RESEED, 0)", $result[1]);
+        $this->assertSame('DELETE FROM [schema_articles]', $result[0]);
+        $this->assertSame(
+            "IF EXISTS (SELECT * FROM sys.identity_columns WHERE OBJECT_NAME(OBJECT_ID) = 'schema_articles' AND last_value IS NOT NULL) " .
+            "DBCC CHECKIDENT('schema_articles', RESEED, 0)",
+            $result[1]
+        );
     }
 
     /**