use*_*285 5 t-sql sql-server ddl rename primary-key
我有一个doc.MyTable
要重命名为的表格doc._MyTable
。然后,我想doc.MyTable
用旧的相同的主键创建一个新的doc.MyTable
。问题是SQL Server说主键已经存在。因此,这意味着我也需要重命名旧的主键。
我尝试了以下方法:
EXEC SP_RENAME 'doc.MyTable', '_MyTable'
-- Method 1
EXEC SP_RENAME 'PK_MyTable', 'PK__MyTable'
-- Method 2
ALTER TABLE [doc].[_MyTable] DROP CONSTRAINT [PK_MyTable]
ALTER TABLE [doc].[_MyTable] ADD CONSTRAINT [PK__MyTable]
PRIMARY KEY CLUSTERED
(
[document_id] ASC,
[line_id] ASC,
[sub_line_id] ASC
)
-- Create new table
CREATE TABLE [doc].[MyTable] (
... columns
CONSTRAINT [PK_MyTable] PRIMARY KEY CLUSTERED (
... key columns
)
... extra conditions
Run Code Online (Sandbox Code Playgroud)
方法1引发此错误:
假设@itemtype输入为'(null)',在当前数据库'db_dev'中找不到名为'PK_MyTable'的项目。
尽管方法2抛出此错误:
违反PRIMARY KEY约束“ PK_MyTable”。无法在对象“ PK.MyTable”中插入重复键。
重复的键值为(10358930,336000,0)。
当我尝试为新表创建新的主键时。
我一次只使用两个“方法”之一。如何解决此问题?
尝试以下解决方案:
EXEC sp_rename '[TableSchema].[TableName].[ConstraintName]', 'NewConstraintName'
Run Code Online (Sandbox Code Playgroud)
例:
EXEC sp_rename '[doc].[_MyTable].[PK_MyTable]', '[PK__MyTable]'
Run Code Online (Sandbox Code Playgroud)
小智 -3
您不能将其从原始表中删除并使用您想要的名称重新创建吗?
ALTER TABLE dbo.YourOldTable
DROP CONSTRAINT YourConstraintname;
Run Code Online (Sandbox Code Playgroud)