方法一:
转自http://www.2cto.com/database/201302/187601.html
declare @TableName nvarchar(250)--游标中取出的数据表名
declare @AllTableHasPrimaryKey int--是否全部都有主键
set @AllTableHasPrimaryKey=1
--声明读取数据库所有数据表名和编号的游标
declare mycursor cursor for select name from dbo.SysObjects WHERE OBJECTPROPERTY(ID, 'IsUserTable') = 1 order by name
--打开游标
open mycursor
--从游标里取出数据赋值到我们刚才声明的数据表名变量中
fetch next from mycursor into @TableName
--如果游标执行成功 www.2cto.com
while (@@fetch_status=0)
begin
--判断当前数据表是否存在主键
IF NOT EXISTS (select * from information_schema.key_column_usage where TABLE_NAME=''+@TableName+'')
begin
set @AllTableHasPrimaryKey=0;
print '当前数据表['+@TableName+']没有主键'
end
--用游标去取下一条记录 www.2cto.com
fetch next from mycursor into @TableName
end
if(@AllTableHasPrimaryKey=1)
begin
print '数据库中所有数据表都有主键'
end
--关闭游标
close mycursor
--撤销游标
deallocate mycursor
--脚本代码结束
方法二:
转自http://m.oschina.net/blog/77209
--查询所有没有主键的表
SELECT name FROM sys.tables
EXCEPT
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLE_CONSTRAINTS
WHERE CONSTRAINT_TYPE = 'PRIMARY KEY'
hanpp@fwxgx.com