以文本方式查看主题

-  Foxtable(狐表)  (http://foxtable.net/bbs/index.asp)
--  专家坐堂  (http://foxtable.net/bbs/list.asp?boardid=2)
----  储存过程得到的表如何用select语句调用?  (http://foxtable.net/bbs/dispbbs.asp?boardid=2&id=149468)

--  作者:happyft
--  发布时间:2020/5/3 17:18:00
--  储存过程得到的表如何用select语句调用?
dim sql as string = "
SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY 进出日期 ASC ) AS RowNum ,
                    *
          FROM      uv_kc105
          WHERE     进出日期 >= \'2020-03-01\'
                    AND ( 产品编码 LIKE \'%B0104041%\' )
        ) AS tb
WHERE   RowNum >= 1
        AND RowNum <= 6000
"
DataTables(WinName & "_Table1").SQLLoad(sql,False)

原来是用上面的语句直接从后台分页加载数据,但有个问题,数据量很大时上面的查询会非常慢,但实际红色部门的代码执行只要3秒,但加上前面这个简单的分页查询时
速度就很慢,2分钟都查不出来,直接显示超时了,但只要把红色的先保存在一个临时表中,相同的查询也只有3秒

所以用临时表就不能直接用sql查询语句了,改为了储存过程:
Dim cmd As New SQLCommand
cmd.ConnectionName = Mydata
cmd.CommandText = "Exec usp_ldpage_query10 \'" & ldpagecol & "\',\'" & Loadorder & "\',\'" & tbs & "\',\'" & Filter & "\'," & r1 & "," & r2
Dim dt As DataTable  = cmd.ExecuteReader
dim sql as string = "Select * From dt"
DataTables(WinName & "_Table1").SQLLoad(sql,False)
上面蓝色部份应该如何写才可以用下面这句sqlLoad语句加载? (我现在是将储存过程执行的结果先存入一个物料表中再查询)
谢谢!



--  作者:有点酸
--  发布时间:2020/5/4 8:51:00
--  
既然有了RowNum列,直接用常规方法分页加载就行了:

LoadOver指定为RowNum列,也就是根据RowNum列分页。



--  作者:HappyFt
--  发布时间:2020/5/4 11:44:00
--  
我的所有表单都是sqltable fill表结构的,如果加载数据时又用常规方法原来有时就不会加载数据,
或者这个查询还可以怎么改速度不慢就行?
SELECT  *
FROM    ( SELECT    ROW_NUMBER() OVER ( ORDER BY 进出日期 ASC ) AS RowNum ,
                    *
          FROM      uv_kc105
          WHERE     进出日期 >= \'2020-03-01\'
                    AND ( 产品编码 LIKE \'%B0104041%\' )
        ) AS tb
WHERE   RowNum >= 1
        AND RowNum <= 6000
因为有100W以上数据,红色部份很快,3秒就可以,但为何加了外部查询也只是从这个查询中再分页显示,按理更快,为何变慢了?
谢谢

--  作者:有点酸
--  发布时间:2020/5/4 14:14:00
--  
这个要问微软了,或者去一些专业的SQL论坛问问


1、给进出日期加上索引

2、给产品编号加上全文索引


产品编号一定要用用Like吗,而且一定要包括某个内容的编码吗? 
[此贴子已经被作者于2020/5/4 14:14:50编辑过]