
加好友 发短信
等级:八尾狐
帖子:1938
积分:17793
威望:0
精华:0
注册:2014/7/29 19:09:00
|
Post By:2018/6/28 18:44:00 [只看该作者]
直接在sql里面执行查询的数据,都是远程数据库 SE LECT [_Identify], [sys_Fzt], [sys_Over], [进出单号], [进出日期], [进出单位], [仓库], [仓管员], [产品编码], [来源单号], [品名], [规格], [工序号], [入库数量], [出库数量], [进出数量], [计量单位], [品质判定], [进出类别], [盘点序号], [品质状态] FROM [dbo].[uv_ck110] --uv_ck110这个视图就是没有where条件将每个表数据直接union的 WHERE 进出日期 > '2018-06-26' 上面是直接在后面加条件的查询 ,
而先用了where条件再union的是通过调用储存过程来测试的如下: EXEC @return_value = [dbo].[usp_kcinout] @whereflt = N'进出日期 > ''2017-06-26'''
用了2018-06-26,2017-06-26,2014-06-26三个日期分别执行查询出来的数据时间都是差不多的 1199条/1秒内,20万/29秒,70万/1分48秒
是不是我的动态sql语句拼接的不正确啊,但又没发现哪里有错,sql语句如下(共有23个表中查询) @whereflt是传入条件 DECLARE @sql NVARCHAR(MAX); DECLARE @sql2 NVARCHAR(MAX); DECLARE @flt NVARCHAR(400); SE T @flt = REPLACE(@whereflt, '进出日期', '入库日期'); --替换进出日期 SE T @sql2 = ' SE LECT a._Identify , a.sys_Fzt , b.sys_Over , b.入库单号 AS 进出单号 , a.入库日期 AS 进出日期 , a.入库单位 AS 进出单位 , a.仓库 , a.仓管员 , b.产品编码 , b.来源单号 , b.品名 , b.规格 , 0 AS 工序号 , b.数量 AS 入库数量 , 0 AS 出库数量 , b.数量 AS 进出数量 , b.计量单位 , 品质判定 , ''采购入库'' AS 进出类别 , 0 AS 盘点序号 , CASE WHEN b.品质判定 IN ( ''合格'', ''特采'' ) THEN ''合格品'' WHEN b.品质判定 IN ( ''选别'', ''退货'' ) THEN ''不良品'' WHEN b.品质判定 = ''报废'' THEN ''报废品'' ELSE ''待检品'' END AS 品质状态 FROM 采购入库单 a INNER JOIN 采购入库明细 b ON a.入库单号 = b.入库单号 where ' + @flt; SE T @sql = @sql2 + 'Union all ' + CHAR(10);
SE T @flt = REPLACE(@whereflt, '进出日期', '退货日期'); --替换进出日期 SE T @sql2 = ' SE LECT a._Identify , a.sys_Fzt , b.sys_Over , b.退货单号 AS 进出单号 , a.退货日期 AS 进出日期 , a.收货单位 AS 进出单位 , a.仓库 , a.仓管员 , b.产品编码 , b.来源单号 , b.品名 , b.规格 , 0 AS 工序号 , -b.数量 AS 入库数量 , 0 AS 出库数量 , -b.数量 AS 进出数量 , b.计量单位 , 品质状态 , ''采购退货'' AS 进出类别 , 0 AS 盘点序号 , CASE WHEN b.品质状态 = ''合格品'' THEN ''合格品'' WHEN b.品质状态 = ''不良品'' THEN ''不良品'' WHEN b.品质状态 = ''报废品'' THEN ''报废品'' ELSE ''待检品'' END AS 品质状态 FROM dbo.采购退货单 AS a INNER JOIN 采购退货明细 AS b ON a.退货单号 = b.退货单号 where ' + @flt; SE T @sql = @sql + @sql2 + 'Union all ' + CHAR(10); 其他表相同,最后再 EXEC sp_executesql @sql
|
|