From 0317403897fdde5f672b2b74c0e7bd37b9ba8123 Mon Sep 17 00:00:00 2001 From: mysticmind Date: Mon, 7 Oct 2024 21:36:00 +0530 Subject: [PATCH] "Remove usage of sp_MSdropconstraints - Remove usage of sp_MSdropconstraints and replace with logic to just delete FK constraints - Fixes GH-118 --- src/Weasel.SqlServer/Tables/Table.cs | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/Weasel.SqlServer/Tables/Table.cs b/src/Weasel.SqlServer/Tables/Table.cs index 14ea6919..456c0763 100644 --- a/src/Weasel.SqlServer/Tables/Table.cs +++ b/src/Weasel.SqlServer/Tables/Table.cs @@ -64,7 +64,15 @@ public void WriteCreateStatement(Migrator migrator, TextWriter writer) { if (migrator.TableCreation == CreationStyle.DropThenCreate) { - writer.WriteLine("EXEC sp_MSdropconstraints '{0}', '{1}';", Identifier.Name, Identifier.Schema); + // drop all FK constraints + var sqlVariableName = $"@sql_{Guid.NewGuid().ToString().ToLower().Replace("-", "_")}"; + writer.WriteLine("DECLARE {0} NVARCHAR(MAX) = '';", sqlVariableName); + writer.WriteLine("SELECT {0} = {1} + 'ALTER TABLE {2} DROP CONSTRAINT ' + QUOTENAME(name) + ';'", + sqlVariableName, sqlVariableName, Identifier.QualifiedName); + writer.WriteLine("FROM sys.foreign_keys"); + writer.WriteLine("WHERE referenced_object_id = OBJECT_ID('{0}');", Identifier.QualifiedName); + writer.WriteLine("EXEC sp_executesql {0}", sqlVariableName); + writer.WriteLine("DROP TABLE IF EXISTS {0};", Identifier); writer.WriteLine("CREATE TABLE {0} (", Identifier); }