要添加PRIMARY KEY,首先要将原来的PRIMARY KEY删除。PRIMARY KEY本身有名字,可用下面的SQL语句查得: select * from sysobjects where xtype='PK' 如果不自己命名的话,默认会生成如下格式的主键名: PK__tempTable__74AE54BC 其中tempTable为表名,74AE54BC是自己生成的,也可能没有。 现假设有表tempTable,其中有字段H_F1(primary key char(10))、H_F2(char(10))、H_F3(char(10))、H_F4(char(10)),现在要将H_F1、H_F2共同设为主键,可进行如下操作: 1、删除原来的主键: alter table tempTable drop PK__tempTable__74AE54BC 2、将H_F2字段改为not null: alter table tempTable alter column H_F2 char(10) not null 3、重新添加主键: alter table tempTable add primary key(H_F1,H_F2)
找主键名:select object_name(constid) from sysconstraints where ( OBJECTPROPERTY (constid,'CnstIsClustKey') =1 or OBJECTPROPERTY (constid,'CnstIsNonclustKey') =1) and object_name(id)='yourtablename'
做成一个函数:create function get_primarykey_name (@tablename varchar(256)) returns varchar(256) as begin declare @pk_name varchar(256) select @pk_name =object_name(constid) from sysconstraints where ( OBJECTPROPERTY (constid,'CnstIsClustKey') =1 or OBJECTPROPERTY (constid,'CnstIsNonclustKey') =1) and object_name(id)=@tablename return @pk_name end go select dbo.get_primarykey_name('test')
select * from sysobjects where xtype='PK'
如果不自己命名的话,默认会生成如下格式的主键名:
PK__tempTable__74AE54BC
其中tempTable为表名,74AE54BC是自己生成的,也可能没有。
现假设有表tempTable,其中有字段H_F1(primary key char(10))、H_F2(char(10))、H_F3(char(10))、H_F4(char(10)),现在要将H_F1、H_F2共同设为主键,可进行如下操作:
1、删除原来的主键:
alter table tempTable drop PK__tempTable__74AE54BC
2、将H_F2字段改为not null:
alter table tempTable alter column H_F2 char(10) not null
3、重新添加主键:
alter table tempTable add primary key(H_F1,H_F2)
where ( OBJECTPROPERTY (constid,'CnstIsClustKey') =1 or OBJECTPROPERTY (constid,'CnstIsNonclustKey') =1)
and object_name(id)='yourtablename'
returns varchar(256)
as
begin
declare @pk_name varchar(256)
select @pk_name =object_name(constid) from sysconstraints
where ( OBJECTPROPERTY (constid,'CnstIsClustKey') =1
or OBJECTPROPERTY (constid,'CnstIsNonclustKey') =1)
and object_name(id)=@tablename
return @pk_name
end
go
select dbo.get_primarykey_name('test')