Browse Source

Reset ident only if values were generated

Corey Taylor 4 years ago
parent
commit
6ff96beedd

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

@@ -664,7 +664,9 @@ class SqlserverSchemaDialect extends SchemaDialect
             $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()
                 );
             }

+ 5 - 1
tests/TestCase/Database/Schema/SqlserverSchemaTest.php

@@ -1101,7 +1101,11 @@ SQL;
         $result = $table->truncateSql($connection);
         $this->assertCount(2, $result);
         $this->assertSame('DELETE FROM [schema_articles]', $result[0]);
-        $this->assertSame("DBCC CHECKIDENT('schema_articles', RESEED, 0)", $result[1]);
+        $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]
+        );
     }
 
     /**