È possibile rinominare un vincolo in SQL Server? Non voglio dover cancellare e crearne uno nuovo perché questo vincolo influenza altri vincoli già esistenti e dovrò ricreare/alterare quelli.Rinominare un vincolo in SQL Server?
risposta
è possibile rinominare utilizzando sp_rename utilizzando @objtype = 'OBJECT'
Questo funziona su oggetti elencati in sys.objects che comprende vincoli
È possibile utilizzare sp_rename.
sp_rename 'CK_Ax', 'CK_Ax1'
+1 Questo è ciò che SSMS utilizza quando si rinominano i vincoli. Per un vincolo PK passa 'INDICE' come tipo di oggetto. –
È anche importante notare che i vincoli CHECK, a differenza dei PK, non richiedono un prefisso tabella sul primo parametro 'sp_rename', e falliranno se ne usi uno. – mattmc3
Dopo un po 'di più di scavo, ho scoperto che in realtà ha di essere in questa forma:
EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint', N'OBJECT'
Questa è la risposta più precisa. Gli altri moduli funzionano solo perché molte persone scaricano tutte le loro tabelle nello schema predefinito (di solito "dbo :) e puoi omettere lo schema predefinito. Ma se usi più schemi, questo è corretto (e puoi sempre indicare" dbo ")). – Godeke
risposta è vero:
exec sp_rename
@objname = 'Old_Constraint',
@newname = 'New_Constraint',
@objtype = 'object'
So che questo è una vecchia domanda, ma ho trovato il seguente per essere molto utile, oltre alle altre grandi risposte:
Se il vincolo di essere rinominato ha un periodo in esso (dot), allora avete bisogno di racchiuderlo tra parentesi quadre, in questo modo:
sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'
Solo nel caso in cui non si può ottenere questo lavoro, in MSDN - * "Quando si rinomina un vincolo, è necessario specificare lo schema a cui appartiene il vincolo." * –
Per i vincoli PK non è necessario specificare '@objtype = 'OBJECT''. Basta specificare il vecchio nome e il nuovo nome. – pkuderov