sql 2000 把所有表的第一个字段 设置为主键
发布网友
发布时间:2024-10-22 04:41
我来回答
共1个回答
热心网友
时间:2024-10-22 16:42
给你点参考,其实检索可以做的更好,只是参考,不想回复你,因为不喜欢回复匿名的帖子。看这个有点技术难度就回复你一些东西。
个人认为你这个只是临时的任务,所以我就不写那么严谨了!记住表的第一个字段必须非空才能设置主键。
----------------------------------------------------
添加主键
use NTE
SELECT 'alter table ' + B.name + ' add constraint PK_'+B.name+'_'+A.name+ ' primary key(' + A.name +');' FROM sys.columns A join sys.tables B
on (A.object_id=B.object_id and A.column_id=1)
-----
以上生成的结果集是:
alter table T_A add constraint PK_T_A_ID primary key(ID);
alter table T_B add constraint PK_T_B_ID primary key(ID);
alter table T_C add constraint PK_T_C_ID primary key(ID);
alter table T_D add constraint PK_T_D_ID primary key(ID);
把这些结果集copy进查询edit 或是查询分析器。执行下就ok了!记住我这个不断定非空,理论上比我写的复杂的多。
---------------------------------
删除主键
use NTE
SELECT 'alter table ' + B.name + ' drop constraint PK_'+B.name+'_'+A.name +' ;' FROM sys.columns A join sys.tables B
on (A.object_id=B.object_id and A.column_id=1)
查询结果:
alter table T_A drop constraint PK_T_A_ID ;
alter table T_B drop constraint PK_T_B_ID ;
alter table T_C drop constraint PK_T_C_ID ;
alter table T_D drop constraint PK_T_D_ID ;
你也把这些结果copy进查询分析器执行一番。就ok了!
--------------------------
如果定时任务就写触发器,放游标吧!加上动态sql。