报表开发工具--获取数据库每个表TOP几条数据,便于学习探索数据库表之间的联系

楼主
。。

BI工具__获取数据库每个表TOP几条数据.docx (204.02 K)

BI开发小工具:获取数据库每个表TOP几条数据

 

备注:本表代码为仅适用于SQLserver 2005 存储过程。MySQL的可以看本文最下面的图片示意导出全部数据.

作用:由于数据库的低冗余度设计,表单的字段值很多是根据ID关联的,比如下图的例子,原料库里的总类,类别,名称在原料库表goods_1里都是以ID的形式存在着,新手可能会摸不着头脑这ID对应的文字又存在于哪个表单里,那么这时候可以使用本工具。在本工具导出来的文件里查找" 安装配件 ”(因为导出来的字段值前后都有空格,因此把查找值前后都加空格来查找可以更精准),查找出来可能存在的表单有CLASS_DETAIL 和 GOODS_8,再根据经验或者数据字典确定是CLASS_DETAIL表用来关联。本工具有利于新旧数据员对数据库进行自我学习摸索,同时降低经验丰富的员工对每个表单都亲力亲为指导的程度。本表只适用于定义型的数据,不适合查询业务型的数据。

ERP截图:

数据库截图:

↓↓

本工具搜索关键字截图:

代码如下:

USE [OTHER]

GO

/****** 对象: StoredProcedure [dbo].[p_循环获取数据库每个表TOP几条数据] 脚本日期: 09/28/2021 10:46:07 ******/

SET ANSI_NULLS ON

GO

SET QUOTED_IDENTIFIER ON

GO

ALTER procedure [dbo].[p_循环获取数据库每个表TOP几条数据] --exec other.dbo.p_循环获取数据库每个表TOP几条数据 'kk','100000' --需使用'将结果保存到文件'的方式执行,最好在十万以下

(@DS_Name nvarchar(100),@qty nvarchar(40)) --数据库名,查询top数量

AS

BEGIN

SET NOCOUNT ON

declare @SQLString_DS_Name nvarchar(max) --获取所有有权限的表和视图的名单

declare @SQLString_1 nvarchar(max)

declare @SQLString_2 nvarchar(max)

CREATE TABLE #tablename ( -- 因定义游标不能执行存储过程,故使用临时表代替

[NAME] [nvarchar](100) NULL,

)

SET @SQLString_DS_Name=N'INSERT INTO #tablename select distinct name from ' + @DS_Name + '.dbo.sysobjects where xtype='''+'U'+''' order by name ' ; --表

--SET @SQLString_DS_Name=N'INSERT INTO #tablename select distinct name from ( select distinct name from ' + @DS_Name + '.dbo.sysobjects where xtype='''+'U'+''' union all select distinct name from ' + @DS_Name + '.dbo.sysobjects where xtype='''+'V'+''' ) as t order by name ' ; --表和视图

exec sp_executesql @SQLString_DS_Name

set @SQLString_1=N''

set @SQLString_2=N''

DECLARE @tableName nvarchar(100)

DECLARE My_Cursor CURSOR --定义游标

FOR ( select name from #tablename ) --查出需要的集合放到游标中-- 因定义游标不能执行存储过程,故使用临时表代替

OPEN My_Cursor; --打开游标

FETCH NEXT FROM My_Cursor INTO @tableName; --读取第一行数据

WHILE @@FETCH_STATUS = 0

BEGIN

-- PRINT @pnum1; --打印数据(打印CAILIAO表中的NUMBER)

set @SQLString_1=N' select top '+@qty+ ' '''+@tableName+''' as tablename , * from ' + @DS_Name + '.dbo.'+@tableName+' ;'

set @SQLString_2=@SQLString_2+@SQLString_1

FETCH NEXT FROM My_Cursor INTO @tableName; --读取下一行数据(将CAILIAO表中的NUMBER放到@pnum1变量中)

END

CLOSE My_Cursor; --关闭游标

DEALLOCATE My_Cursor; --释放游标

--select @SQLString_2

exec sp_executesql @SQLString_2 --exec sp_executesql 该存储过程为执行字符串的语句

END

具体使用方法:

  1. 本代码已添加到数据库,直接执行即可,注意要通过“将结果保存到文件”的形式执行
  2. 使用Emeditor打开即可

 

*******************************

mysql可以使用以下方法导出或查找所有数据,效果跟上面的存储过程差不多,但不能控制导出的数量,只能导出全部数据

分享扩散:

沙发
发表于 2021-9-29 13:45:19

各位大佬使用完能不能分享下您的感受,工具对您的帮助性大不大,我该如何优化,或者您还有什么提高效率的想法

编辑于 2021-9-29 15:43
板凳
发表于 2021-9-29 13:45:51

觉得好用的,又熟悉mysql的和Oracle的能不能也分享分享对应数据库版本的

编辑于 2021-9-29 13:46
地板
发表于 2021-9-30 12:03:35
有何用处?
5楼
发表于 2021-10-2 19:22:39
为什么我只查询出来了tablename和id两个字段,sql里面写的是* 啊
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

返回顶部 返回列表