2012-01-03 12 views
55

È 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

53

è possibile rinominare utilizzando sp_rename utilizzando @objtype = 'OBJECT'

Questo funziona su oggetti elencati in sys.objects che comprende vincoli

+9

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." * –

+0

Per i vincoli PK non è necessario specificare '@objtype = 'OBJECT''. Basta specificare il vecchio nome e il nuovo nome. – pkuderov

36

È possibile utilizzare sp_rename.

sp_rename 'CK_Ax', 'CK_Ax1' 
+2

+1 Questo è ciò che SSMS utilizza quando si rinominano i vincoli. Per un vincolo PK passa 'INDICE' come tipo di oggetto. –

+2

È 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

30

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' 

Source

+1

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

7

risposta è vero:

exec sp_rename 
@objname = 'Old_Constraint', 
@newname = 'New_Constraint', 
@objtype = 'object' 
0

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' 
Problemi correlati