2012-01-03 113 views
55

是否可以重新命名SQL Server中的約束?我不想刪除並創建一個新的約束,因爲這個約束會影響其他已經存在的約束,我將不得不重新創建/更改這些約束。重命名SQL Server中的約束?

回答

53

可以重命名使用sp_rename使用@objtype = 'OBJECT'

這部作品在sys.objects中列出的對象,其中包括限制

+9

萬一你不能得到這個工作,它在MSDN中表示 - *「重命名約束時,必須指定約束所屬的模式。」* – 2013-10-11 10:41:40

+0

對於PK約束,不需要指定@objtype ='OBJECT'。只需指定舊名稱和新名稱即可。 – pkuderov 2017-02-27 23:08:47

36

您可以使用sp_rename

sp_rename 'CK_Ax', 'CK_Ax1' 
+2

+1這是SSMS在重新命名約束時使用的內容。對於PK約束,它將'INDEX'作爲對象類型傳遞。 – 2012-01-03 13:24:39

+2

同樣重要的是要注意,與PKs不同,CHECK約束不要求在第一個'sp_rename'參數上有一個表前綴,並且如果使用它,將會失敗。 – mattmc3 2017-01-10 16:52:15

30

一些更多的挖掘後,我發現,它實際上已經是這種形式:

EXEC sp_rename N'schema.MyIOldConstraint', N'MyNewConstraint', N'OBJECT' 

Source

+1

這是更準確的答案。其他形式只能工作,因爲大多數人將所有錶轉儲到默認模式(通常是「dbo :)」,並且您可以省略默認模式。但是如果您使用多個模式,則這是正確的(並且始終可以聲明「dbo」 )。 – Godeke 2017-02-27 17:19:50

7

的答案是正確的:

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

我知道這是一個古老的問題,但我發現以下是非常有用的,除了其他很好的答案:

如果要重命名的約束中有一個句點,那麼你需要把它們放在方括號,就像這樣:

sp_rename 'schema.[Name.With.Period.In.It]', 'New.Name.With.Period.In.It'