【发布时间】:2017-09-21 09:40:31
【问题描述】:
我有一个表 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
方法一抛出此错误:
在当前数据库“db_dev”中找不到名称为“PK_MyTable”的项目,因为@itemtype 输入为“(null)”。
虽然方法 2 抛出了这个:
违反主键约束“PK_MyTable”。无法在对象“PK.MyTable”中插入重复键。
重复键值为(10358930, 336000, 0)。`
当我尝试为新表创建新主键时。
我一次只使用两种“方法”中的一种。我该如何解决这个问题?
【问题讨论】:
-
方法一和方法二不清楚。
-
方法是指上面代码中的“尝试”。我将其全部更改为“方法”以使其更清晰。
标签: sql-server tsql primary-key rename ddl