MS SQL, once again: Folgendes Skript legt eine Spalte mit Default “1” an:
1 |
ALTER TABLE lc_storeasset ADD isPrimary bit NOT NULL DEFAULT 1; |
Aber es legt nicht nur diese Spalte an, sondern auch einen Constraint “DF__lc_storea__isPri__6A85CC04”. Möchte man diese Spalte nun wieder löschen:
1 |
ALTER TABLE lc_storeasset DROP COLUMN isprimary; |
dann meldet MS SQL Erfolg (!), tatsächlich aber wurde die Spalte nicht gelöscht m( Besonders schön in Migrationsskripten. Nicht.
Man kann den Constraint nun explizit löschen:
1 |
ALTER TABLE lc_storeasset DROP CONSTRAINT DF__lc_storea__isPri__6A85CC04; |
Oder man sucht ihn dynamisch aus den Tiefen des Systems:
1 2 3 4 5 6 |
DECLARE @ObjectName NVARCHAR(100) SELECT @ObjectName = OBJECT_NAME([default_object_id]) FROM SYS.COLUMNS WHERE [object_id] = OBJECT_ID('[dbo].[lc_storeasset]') AND [name] = 'isprimary'; IF @ObjectName != '' BEGIN EXEC('ALTER TABLE [dbo].[lc_storeasset] DROP CONSTRAINT ' + @ObjectName) END |
HTH