• SQL查找数据库中所有没有主键的数据表脚本


    --SQL查找数据库中所有没有主键的数据表脚本
     
    --运行脚本后在消息中可能会显示下面现象中的一种:
    --(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)
    --(2)当前数据表[数据表名]没有主键(则可方便找到没主键的数据表)
     
    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
    --如果游标执行成功 
    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
     
     --用游标去取下一条记录 
        fetch next from mycursor into @TableName
    end
     
    if(@AllTableHasPrimaryKey=1)
    begin
    print '数据库中所有数据表都有主键'
    end
     
    --关闭游标
    close mycursor
    --撤销游标
    deallocate mycursor
    --脚本代码结束

    ----查询表索引

    SELECT

    OBJECT_NAME(s.object_id) AS 表名,

    COUNT(1) AS 唯一索引数量

    FROM sys.indexes s

    WHERE is_unique = 1

    GROUP BY s.object_id

    -----查询表table1的主键字段和索引

        Declare @table_name varchar(100) 
        Set @table_name='table1'
        --1、可以根据系统存储过程 
        Execute   sp_pkeys @table_name 
        
        --2、根据系统表获得 
        Declare @objectid int 
        Set @objectid=object_id(@table_name) 
        Select    
        col_name(@objectid,colid)  '主键字段' 
        From  sysobjects         as o 
        Inner Join sysindexes    as i On i.name=o.name  
        Inner Join sysindexkeys  as k On k.indid=i.indid 
        Where  
        o.xtype = 'PK' and parent_obj=@objectid and k.id=@objectid

    --简易版查询所有主键为空的表

    SELECT TableName = O.Name  FROM sys.objects O  WHERE o.name NOT IN ( SELECT o2.name  FROM sysobjects o1  JOIN sysobjects o2 ON o1.parent_obj = o2.id  AND o1.xtype = 'pk' )  AND O.type = 'U'
  • 相关阅读:
    ssh免密登录
    jdk安装
    jq选择器
    使用<button></button>标签
    mysql连接字符串
    如何把maven项目转成web项目
    pl/sql连接远程oracle
    Oracle 存储过程
    SQL Server存储过程
    MySQL存储过程
  • 原文地址:https://www.cnblogs.com/summer_adai/p/3291666.html
Copyright © 2020-2023  润新知