@@ -43,17 +43,6 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
4343 "WHERE" \
4444 " t.name = %(table)s AND" \
4545 " c.name = %(column)s"
46- _sql_select_foreign_key_constraints = "SELECT" \
47- " po.name AS table_name," \
48- " co.name AS constraint_name " \
49- "FROM sys.foreign_key_columns fkc " \
50- "INNER JOIN sys.objects co ON" \
51- " fkc.constraint_object_id = co.object_id " \
52- "INNER JOIN sys.tables po ON" \
53- " fkc.parent_object_id = po.object_id " \
54- "INNER JOIN sys.tables ro ON" \
55- " fkc.referenced_object_id = ro.object_id " \
56- "WHERE ro.name = %(table)s"
5746 sql_alter_column_default = "ADD DEFAULT %(default)s FOR %(column)s"
5847 sql_alter_column_no_default = "DROP CONSTRAINT %(column)s"
5948 sql_alter_column_not_null = "ALTER COLUMN %(column)s %(type)s NOT NULL"
@@ -62,7 +51,23 @@ class DatabaseSchemaEditor(BaseDatabaseSchemaEditor):
6251 sql_create_column = "ALTER TABLE %(table)s ADD %(column)s %(definition)s"
6352 sql_delete_column = "ALTER TABLE %(table)s DROP COLUMN %(column)s"
6453 sql_delete_index = "DROP INDEX %(name)s ON %(table)s"
65- sql_delete_table = "DROP TABLE %(table)s"
54+ sql_delete_table = """
55+ DECLARE @sql_drop_constraint nvarchar(255)
56+ SELECT @sql_drop_constraint = name
57+ FROM sys.foreign_keys
58+ WHERE referenced_object_id = object_id('%(table)s')
59+ IF @sql_drop_constraint IS NOT NULL
60+ BEGIN
61+ SELECT
62+ @sql_drop_constraint = 'ALTER TABLE [' + OBJECT_NAME(parent_object_id) + '] ' +
63+ 'DROP CONSTRAINT [' + @sql_drop_constraint + '] '
64+ FROM sys.foreign_keys
65+ WHERE referenced_object_id = object_id('%(table)s')
66+ print(@sql_drop_constraint)
67+ exec sp_executesql @sql_drop_constraint
68+ END
69+ DROP TABLE %(table)s
70+ """
6671 sql_rename_column = "EXEC sp_rename '%(table)s.%(old_column)s', %(new_column)s, 'COLUMN'"
6772 sql_rename_table = "EXEC sp_rename %(old_table)s, %(new_table)s"
6873 sql_create_unique_null = "CREATE UNIQUE INDEX %(name)s ON %(table)s(%(columns)s) " \
@@ -818,32 +823,7 @@ def create_model(self, model):
818823 self .create_model (field .remote_field .through )
819824
820825 def delete_model (self , model ):
821- """
822- Deletes a model from the database.
823- """
824- # Delete the foreign key constraints
825- result = self .execute (
826- self ._sql_select_foreign_key_constraints % {
827- "table" : self .quote_value (model ._meta .db_table ),
828- },
829- has_result = True
830- )
831- if result :
832- for table , constraint in result :
833- sql = self .sql_alter_column % {
834- "table" : self .quote_name (table ),
835- "changes" : self .sql_alter_column_no_default % {
836- "column" : self .quote_name (constraint ),
837- }
838- }
839- self .execute (sql )
840-
841- # Delete the table
842826 super ().delete_model (model )
843- # Remove all deferred statements referencing the deleted table.
844- for sql in list (self .deferred_sql ):
845- if isinstance (sql , Statement ) and sql .references_table (model ._meta .db_table ):
846- self .deferred_sql .remove (sql )
847827
848828 def execute (self , sql , params = (), has_result = False ):
849829 """
0 commit comments