Sto cercando di creare script di aggiornamento e backout in SQL. Lo script di aggiornamento aggiunge una colonna in questo modo:Perché SQL Server continua a creare un vincolo DF?
IF NOT EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
ADD ColumnName bit NOT NULL DEFAULT(0)
Lo script backout rimuove la colonna in questo modo:
IF EXISTS (SELECT * FROM sys.columns WHERE Name = N'ColumnName'
AND object_id = OBJECT_ID(N'[dbo].[TableName]'))
ALTER TABLE TableName
DROP COLUMN ColumnName
Tuttavia, lo script backout getta questo errore:
Msg 5074, Level 16, State 1, Line 5
The object 'DF__TableName__ColumnName__1BF3D5BD' is dependent on column 'ColumnName'.
Msg 4922, Level 16, State 9, Line 5
ALTER TABLE DROP COLUMN ColumnName failed because one or more objects access this column.
lo so come eliminare il vincolo, ma il nome del vincolo cambia ogni volta (il suffisso cambia). Ho bisogno che SQL Server interrompa la creazione di questo vincolo con nomi casuali O devo essere in grado di rimuovere il vincolo nel mio script utilizzando caratteri jolly, poiché il nome cambia.
+1 si raccomanda di solito di nominare esplicitamente vincoli. –
Grazie Martin. Inoltre, per verificare correttamente se il vincolo esistente (prima cadere), ho usato il metodo descritto ** [qui] (http://stackoverflow.com/questions/2499332/how-to-check-if-a-constraint- esiste-in-sql server/6839547 # 6839547) ** – WEFX
@ ÁlvaroG.Vicario - sì. La risposta di Martin ti offre un esempio. –