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
具体使用方法:
- 本代码已添加到数据库,直接执行即可,注意要通过“将结果保存到文件”的形式执行
- 使用Emeditor打开即可
*******************************
mysql可以使用以下方法导出或查找所有数据,效果跟上面的存储过程差不多,但不能控制导出的数量,只能导出全部数据
|