【发布时间】:2020-06-15 16:39:48
【问题描述】:
我需要将表中的现有列添加到表的 PK 中。该表已复制,因此我无法仅添加 SSMS。有没有办法做到这一点? PK 已经是 3 列的组合,现在我需要在定义中添加第 4 列。
【问题讨论】:
-
我很确定,除了从复制中删除整个表,然后重新添加它之外,这是无法做到的。
标签: sql-server replication composite-primary-key
我需要将表中的现有列添加到表的 PK 中。该表已复制,因此我无法仅添加 SSMS。有没有办法做到这一点? PK 已经是 3 列的组合,现在我需要在定义中添加第 4 列。
【问题讨论】:
标签: sql-server replication composite-primary-key
我想通了,这是执行此操作的脚本:
USE <db name>
GO
exec sp_dropsubscription @publication = N'<publication>', @article = N'<article>', @subscriber = N'<subscriber>', @destination_db = N'<destination db>'
GO
exec sp_droparticle @publication = N'<publication>', @article = N'<article>'
GO
ALTER TABLE [dbo].[<table name>] DROP CONSTRAINT [<constraint name>] WITH ( ONLINE = OFF )
GO
/****** Object: Index [<index name>] Script Date: 6/19/2020 7:44:44 AM ******/
ALTER TABLE [dbo].[<table name>] ADD CONSTRAINT [<constraint name>] PRIMARY KEY CLUSTERED
(
[COL1] ASC,
[COL2] ASC,
[COL3] ASC,
[COL4] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON, FILLFACTOR = 90) ON [MFDP00_MFDP00FG08]
GO
exec sp_addarticle @publication='<publication>', @article ='<article>', @source_object='<source object>', @schema_option=<schema option>
GO
exec sp_addsubscription @publication='<publication>', @article='<article>', @subscriber='<subscriber>', @destination_db='<destination db>'
GO
【讨论】: