--如果要用脚本,则要删除主键/外键约束alter table ArchiveDoc add id_bak bigint NULL
goupdate ArchiveDoc set id_bak=DM1_ArchiveDocID
go--删除主键约束
alter table ArchiveDoc drop constraint PK_ArchiveDocTable
go--删除外键约束
alter table ArchiveDocApprove drop constraint FK_ArchiveDocApprove_ArchiveDoc
alter table ArchiveDocAttribute drop constraint FK_ArchiveDocAttribute_ArchiveDoc1
alter table ArchiveDocAttribute drop constraint FK_ArchiveDocAttribute_ArchiveDoc
goalter table ArchiveDoc drop column DM1_ArchiveDocID
goexec sp_rename 'ArchiveDoc.id_bak','DM1_ArchiveDocID','COLUMN'
go
goupdate ArchiveDoc set id_bak=DM1_ArchiveDocID
go--删除主键约束
alter table ArchiveDoc drop constraint PK_ArchiveDocTable
go--删除外键约束
alter table ArchiveDocApprove drop constraint FK_ArchiveDocApprove_ArchiveDoc
alter table ArchiveDocAttribute drop constraint FK_ArchiveDocAttribute_ArchiveDoc1
alter table ArchiveDocAttribute drop constraint FK_ArchiveDocAttribute_ArchiveDoc
goalter table ArchiveDoc drop column DM1_ArchiveDocID
goexec sp_rename 'ArchiveDoc.id_bak','DM1_ArchiveDocID','COLUMN'
go
我把ArchiveDoc 的脚本弄出来
CREATE TABLE [dbo].[ArchiveDoc] (
[DM1_ArchiveDocID] [bigint] IDENTITY (1, 1) NOT NULL ,
[DM1_ArchiveDocName] [varchar] (500) COLLATE Chinese_PRC_CI_AS NOT NULL ,
[DM1_StatusID] [int] NOT NULL
) ON [PRIMARY]
GOALTER TABLE [dbo].[ArchiveDoc] WITH NOCHECK ADD
CONSTRAINT [PK_ArchiveDocTable] PRIMARY KEY CLUSTERED
(
[DM1_ArchiveDocID]
) ON [PRIMARY]
GOALTER TABLE [dbo].[ArchiveDoc] ADD
CONSTRAINT [FK_ArchiveDoc_ArchiveDocStatus] FOREIGN KEY
(
[DM1_StatusID]
) REFERENCES [dbo].[ArchiveDocStatus] (
[DM3_StatusID]
)
GO然后就是其他3张表与DM1_ArchiveDocID 的关系。
老兄给的脚本运行错误是:服务器: 消息 3725,级别 16,状态 1,行 3
约束 'PK_ArchiveDocTable' 正由表 'ArchiveDocApprove' 的外键约束 'FK_ArchiveDocApprove_ArchiveDoc' 引用。
服务器: 消息 3727,级别 16,状态 1,行 3
未能除去约束。请参阅前面的错误信息。
服务器: 消息 3733,级别 16,状态 2,行 5
约束 'FK_ArchiveDocAttribute_ArchiveDoc' 不属于表 'ArchiveDocAttribute'。
服务器: 消息 3727,级别 16,状态 1,行 5
未能除去约束。请参阅前面的错误信息。
服务器: 消息 5074,级别 16,状态 8,行 2
对象 'PK_ArchiveDocTable' 依赖于 列 'DM1_ArchiveDocID'。
服务器: 消息 5074,级别 16,状态 1,行 2
对象 'FK_ArchiveDocAttribute_ArchiveDoc' 依赖于 列 'DM1_ArchiveDocID'。
服务器: 消息 4922,级别 16,状态 1,行 2
ALTER TABLE DROP COLUMN DM1_ArchiveDocID 失败,因为有一个或多个对象访问此列。
服务器: 消息 15335,级别 11,状态 1,过程 sp_rename,行 342
错误: @newname 值 'DM1_ArchiveDocID' 已用作 COLUMN 名称,该值将导致重复,而这是不允许的。希望zjcxc(邹建)老兄帮忙,小弟十分感谢!!
goupdate ArchiveDoc set id_bak=DM1_ArchiveDocID
go
--删除外键约束
alter table ArchiveDocApprove drop constraint FK_ArchiveDocApprove_ArchiveDoc
alter table ArchiveDocAttribute drop constraint FK_ArchiveDocAttribute_ArchiveDoc1
alter table ArchiveDocAttribute drop constraint FK_ArchiveDocAttribute_ArchiveDoc
go--删除主键约束
alter table ArchiveDoc drop constraint PK_ArchiveDocTable
go
alter table ArchiveDoc drop column DM1_ArchiveDocID
goexec sp_rename 'ArchiveDoc.id_bak','DM1_ArchiveDocID','COLUMN'
go
服务器: 消息 3733,级别 16,状态 2,行 6
约束 'FK_ArchiveDocAttribute_ArchiveDoc' 不属于表 'ArchiveDocAttribute'。
服务器: 消息 3727,级别 16,状态 1,行 6
未能除去约束。请参阅前面的错误信息。
服务器: 消息 3725,级别 16,状态 1,行 3
约束 'PK_ArchiveDocTable' 正由表 'ArchiveDocBaseAttribute' 的外键约束 'FK_ArchiveDocAttribute_ArchiveDoc' 引用。
服务器: 消息 3727,级别 16,状态 1,行 3
未能除去约束。请参阅前面的错误信息。
服务器: 消息 5074,级别 16,状态 8,行 1
对象 'PK_ArchiveDocTable' 依赖于 列 'DM1_ArchiveDocID'。
服务器: 消息 5074,级别 16,状态 1,行 1
对象 'FK_ArchiveDocAttribute_ArchiveDoc' 依赖于 列 'DM1_ArchiveDocID'。
服务器: 消息 4922,级别 16,状态 1,行 1
ALTER TABLE DROP COLUMN DM1_ArchiveDocID 失败,因为有一个或多个对象访问此列。
服务器: 消息 15335,级别 11,状态 1,过程 sp_rename,行 342
错误: @newname 值 'DM1_ArchiveDocID' 已用作 COLUMN 名称,该值将导致重复,而这是不允许的。我也想想。
goupdate ArchiveDoc set id_bak=DM1_ArchiveDocID
go--删除外键约束
declare tb cursor local for
select s='alter table ['+c.name+'] drop constraint ['+b.name+']'
from sysforeignkeys a
join sysobjects b on b.id=a.constid
join sysobjects c on c.id=a.fkeyid
join syscolumns d on d.id=c.id and a.fkey=d.colid
join sysobjects e on e.id=a.rkeyid
join syscolumns f on f.id=e.id and a.rkey=f.colid
where e.name='ArchiveDoc' and f.name='DM1_ArchiveDocID'declare @s varchar(8000)
open tb
fetch next from tb into @s
while @@fetch_status=0
begin
exec(@s)
fetch next from tb into @s
end
close tb
deallocate tb
go--删除主键约束
alter table ArchiveDoc drop constraint PK_ArchiveDocTable
goalter table ArchiveDoc drop column DM1_ArchiveDocID
goexec sp_rename 'ArchiveDoc.id_bak','DM1_ArchiveDocID','COLUMN'
go