因為前期表設計不合理,為提高效能,需要將主鍵重新設定為其他字段。以下是示例指令碼。
--修改主鍵示例
declare @keycolname varchar(50),@pkname nvarchar(200)
select @keycolname = syscolumns.name ,@pkname = sysobjects.name
from syscolumns,sysobjects,sysindexes,sysindexkeys
where syscolumns.id = object_id('表名') and sysobjects.xtype = 'pk'
and sysobjects.parent_obj = syscolumns.id
and sysindexes.id = syscolumns.id
and sysobjects.name = sysindexes.name and sysindexkeys.id = syscolumns.id
and sysindexkeys.indid = sysindexes.indid
and syscolumns.colid = sysindexkeys.colid
select @keycolname,@pkname
if @keycolname = '原主鍵字段'
begin
begin tran
exec ( n'alter table [dbo].[表名] drop constraint [' + @pkname + ']');
alter table [dbo].[表名] add constraint [pk_表名] primary key clustered ( 新主鍵字段 asc)
print '表名修改主鍵為新主鍵字段'
commit
endselect @keycolname = name from syscolumns where id=object_id('表名') and colid=(select top 1 colid from sysindexkeys where id=object_id('表名'))
select @keycolname
注意:只有字段型別為not null才能設定為主鍵。如果字段型別為可null,並且欄位有做索引,因為有索引,用指令碼很難操作,可以手動在表設計中將字段設定為not null。然後再用上面的指令碼執行修改。
SqlServer 修改主鍵總結
一.查旬乙個表有哪些主鍵 1 exec sp pkeys table name 表名 可以按資料庫中表的順序顯示 2 select table name,column name from information schema.key column usage where table name 表名 ...
修改表的主鍵
這個例子是工作中遇到的 把原先的自增主鍵id去掉,新增auto pk欄位為自增主鍵,並把id作為唯一索引。alter table ddd tab add column auto pk bigint 20 unsigned not null first modify column id bigint ...
MySQL修改主鍵屬性
當資料表已存在,且有主鍵,修改主鍵的定義有如下兩種方法 關鍵字modify alter table tbl name modify col name col definition first after col name 在col definition 宣告要修改的屬性,如要新增自動編號auto i...