From 67fa5346fb4994cfbe2ee7b871b9fc4468c4fd22 Mon Sep 17 00:00:00 2001 From: Corey Taylor Date: Thu, 9 Sep 2021 02:04:41 -0500 Subject: [PATCH] Reset ident only if values were generated --- src/Database/Schema/SqlserverSchemaDialect.php | 4 +++- tests/TestCase/Database/Schema/SqlserverSchemaTest.php | 6 +++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/Database/Schema/SqlserverSchemaDialect.php b/src/Database/Schema/SqlserverSchemaDialect.php index afae48ab7d4..2178e3ab393 100644 --- a/src/Database/Schema/SqlserverSchemaDialect.php +++ b/src/Database/Schema/SqlserverSchemaDialect.php @@ -649,7 +649,9 @@ public function truncateTableSql(TableSchema $schema): array $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() ); } diff --git a/tests/TestCase/Database/Schema/SqlserverSchemaTest.php b/tests/TestCase/Database/Schema/SqlserverSchemaTest.php index ec68175d723..f21d842a715 100644 --- a/tests/TestCase/Database/Schema/SqlserverSchemaTest.php +++ b/tests/TestCase/Database/Schema/SqlserverSchemaTest.php @@ -1125,7 +1125,11 @@ public function testTruncateSql() $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] + ); } /**