因为这一段sql文白忙了一上午,

本文介绍了一个使用SQL进行循环查询的实例,目标是计算指定时间段内每个月的本部発注数,包括原価金額、売価税込金額及税抜金額。通过创建临时表并利用while循环迭代计算每月数据。

我这个sql文要用的就是循环求每个月的本部発注数,

 

use lhw
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#月別本部発注'))
begin
 drop table #月別本部発注
end
create table #月別本部発注 (月 varchar(10),本部発注原価金額 money, 本部発注売価税込金額 money,本部発注売価税抜金額 money)
if exists(select * from tempdb..sysobjects where id=object_id('tempdb..#jan'))
begin
 drop table #jan
end
create table #jan(jan varchar(20))
declare @acct_monthfrom varchar(20)
declare @acct_monthto varchar(20)
declare @acct_dayfrom varchar(20)
declare @acct_dayto varchar(20)
set @acct_monthfrom='200905'----開始月
set @acct_monthto='200909'----終り月

insert into #jan
 select jan from M_ITEM A
 inner join M_ITEM_LEVEL_NEWEST  B
 on A.ITEM_CD=B.ITEM_CD
 and B.PROD_LEVEL4_CD=116

while(@acct_monthfrom<=@acct_monthto)
begin
 set @acct_dayfrom= (select min(ACCT_DT) from dbo.M_DATE where ACCT_MONTH=@acct_monthfrom)
 set @acct_dayto=(select max(ACCT_DT) from dbo.M_DATE where ACCT_MONTH=@acct_monthfrom)

 

--insert into #jan   
 --select jan from M_ITEM A
 --inner join M_ITEM_LEVEL_NEWEST  B
 --on A.ITEM_CD=B.ITEM_CD
 --and B.PROD_LEVEL4_CD=116

 

 insert into #月別本部発注
 select
   @acct_monthfrom as '月',
  sum(C.ORDER_COST_AMT) as '本部発注原価金額',
  sum(C.ORDER_RETAIL_TAX_INC_AMT) as '本部発注売価税込金額',
  sum(C.ORDER_RETAIL_TAX_EXC_AMT) as '本部発注売価税抜金額'
 
 from
  ORDER_D_STORE_ITEM  C
 inner join #jan D
 on  C.jan=D.jan 
 where C.ORD_TYP='2' --本部発注
 and    C.ORDER_DT between  @acct_dayfrom and  @acct_dayto
  
set @acct_monthfrom=@acct_monthfrom+1

end


select * from #月別本部発注

 

 

绿色代码因为放在了红色处,结果每次循环都会添加大量的jan,数据错误且速度愈来愈慢,呵呵,粗心的代价啊!

<think>我们正在处理用户的问题:如何使用批处理脚本将压缩件上传到企业微信微盘的指定位置。由于企业微信微盘是腾讯企业微信提供的云存储服务,通常我们通过企业微信提供的API来实现件上传。但是,批处理脚本(如Windows批处理.bat)本身并不直接支持调用企业微信API,因此我们需要借助其他工具,例如curl(一个命令行工具,用于传输数据),来发送HTTP请求。步骤:1.获取企业微信的访问令牌(access_token)。2.使用该访问令牌调用企业微信的件上传API,将压缩件上传到临时媒体库。3.将上传后的件移动到微盘的指定位置(如果需要指定微盘的位置,可能需要使用微盘的相关API)。然而,企业微信的API档中,件上传通常分为两步:第一步:上传件到临时素材,获取media_id。第二步:将临时素材的件转存为微盘件,并指定位置。注意:企业微信的API需要企业授权,且调用API需要企业ID(corpid)、应用的Secret等。具体步骤:一、获取access_token请求URL:https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=ID&corpsecret=SECRET其中,ID替换为企业的corpid,SECRET替换为自建应用的Secret。二、上传临时素材企业微信上传临时素材的API:https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=ACCESS_TOKEN&type=file注意:这里type=file,因为我们要上传的是压缩件(如zip,rar等)。三、将临时素材转存为微盘件企业微信提供了将临时素材转存为微盘件的API:https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_create?access_token=ACCESS_TOKEN需要指定父目录(即微盘中的指定位置)和件名,以及临时素材的media_id。但是,请注意,企业微信API的更新可能会改变这些细节,请以官方档为准。由于批处理脚本中处理JSON响应比较麻烦,我们可以使用一些第三方工具,如jq(用于处理JSON),或者使用PowerShell(如果环境是Windows)来处理。这里我们假设环境是Windows,并且可以使用curl和PowerShell。批处理脚本示例(注意:需要根据实际情况替换参数):1.替换corpid和corpsecret为实际值。2.替换要上传的压缩件路径。3.替换微盘中目标位置的父目录(spaceid和fatherid,需要提前获取)。由于获取微盘空间和目录结构比较复杂,这里我们假设已经知道目标位置的fatherid(即父目录的id)。步骤分解:1.获取access_token2.上传件获取media_id3.使用media_id在微盘中创建件(即转存到微盘指定位置)注意:企业微信对件大小有限制(临时素材上传,件大小不能超过20MB)。如果件过大,需要使用分块上传,但企业微信目前(截至当前知识)不支持分块上传到临时素材,所以大件可能需要使用其他方式。下面是一个示例脚本,结合curl和PowerShell解析JSON:由于批处理脚本中解析JSON比较困难,我们可以使用PowerShell内建的命令(如ConvertFrom-Json)来解析。因此,我们可以编写一个PowerShell脚本,或者在一个批处理中调用PowerShell来解析。这里我们采用批处理中嵌入PowerShell命令的方式。示例脚本(upload_to_wechat_work.bat):注意:以下脚本为示例,可能需要根据实际环境调整。```batch@echooffsetlocalenabledelayedexpansionREM设置企业ID和应用的SecretsetCORPID=your_corpidsetCORPSECRET=your_corpsecretREM要上传的压缩件路径setFILE_PATH="C:\path\to\your\file.zip"REM目标微盘空间的spaceid(可以在企业微信管理后台查看或通过API获取)setSPACE_ID=your_spaceidREM目标父目录的fileid(可以通过API获取目录结构)setFATHER_ID=your_fatheridREM第一步:获取access_tokencurl-s-G"https://qyapi.weixin.qq.com/cgi-bin/gettoken"--data-urlencode"corpid=%CORPID%"--data-urlencode"corpsecret=%CORPSECRET%"-otoken.jsonREM使用PowerShell解析token.json获取access_tokensetpsCommand="(Get-Content-Rawtoken.json)|ConvertFrom-Json|Select-ExpandPropertyaccess_token"for/f"delims="%%ain('powershell!psCommand!')dosetACCESS_TOKEN=%%aREM第二步:上传临时素材curl-s-F"file=@%FILE_PATH%""https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=%ACCESS_TOKEN%&type=file"-omedia.jsonREM解析media.json获取media_idsetpsCommand="(Get-Content-Rawmedia.json)|ConvertFrom-Json|Select-ExpandPropertymedia_id"for/f"delims="%%ain('powershell!psCommand!')dosetMEDIA_ID=%%aREM第三步:将临时素材转存到微盘REM构建JSON请求体setREQUEST_BODY={"spaceid":"%SPACE_ID%","fatherid":"%FATHER_ID%","file_type":1,"file_name":"file.zip","media_id":"%MEDIA_ID%"}REM注意:file_type为1表示普通件(压缩件属于普通件)REM将请求体写入临时件echo%REQUEST_BODY%>request_body.jsonREM发送请求创建微盘件curl-s-XPOST-H"Content-Type:application/json"-d"@request_body.json""https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_create?access_token=%ACCESS_TOKEN%"-oresult.jsonREM输出结果typeresult.jsonREM清理临时件(可选)deltoken.jsonmedia.jsonrequest_body.jsonresult.jsonendlocal```注意:1.上述脚本中,需要替换your_corpid,your_corpsecret,your_spaceid,your_fatherid以及件路径。2.关于spaceid和fatherid的获取,可以通过企业微信的微盘API(如获取空间信息、获取目录下的件列表等)来获取。具体请参考企业微信官方档。3.如果件上传失败,请检查返回的JSON(如token.json,media.json,result.json)中的错误信息。4.此脚本需要系统中有curl和PowerShell(Windows系统自带PowerShell)。5.由于企业微信API对访问频率有限制,请勿频繁调用。由于企业微信API的复杂性,建议先通过企业微信管理后台创建应用,并确保该应用有微盘的操作权限。另外,如果上传的件需要指定不同的件名,可以在第三步的JSON中修改"file_name"字段。如果脚本执行中出现问题,可以逐步执行并查看每个步骤生成的临时件(如token.json,media.json等)以排查错误。由于批处理脚本的限制,对于JSON中可能存在的特殊字符(如引号)处理可能不够健壮,请确保件名中不包含特殊字符,或者使用PowerShell脚本代替。因此,如果条件允许,建议使用Python等脚本语言来编写,这样处理JSON更加方便。但是,用户要求使用批处理脚本,所以提供了以上方案。参考资料:企业微信API档:https://work.weixin.qq.com/api/doc特别说明:以上代码示例仅供参考,具体实现需要根据企业微信API的更新和实际环境进行调整。相关问题:§§相关问题§§1.如何获取企业微信微盘中的spaceid和fatherid?2.企业微信API上传件的大小限制是多少?如果超过限制怎么办?3.除了使用批处理脚本,还有哪些方法可以实现自动上传件到企业微信微盘?4.如何确保上传过程中的错误处理(如网络错误、认证失败等)?</think>### 如何通过批处理脚本上传压缩件到企业微信微盘 要实现通过批处理脚本上传压缩件到企业微信微盘指定位置,需要结合企业微信API和命令行工具(如curl)。以下是完整解决方案: #### 核心步骤 1. **获取访问令牌** ```batch curl -G "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=YOUR_CORPID&corpsecret=YOUR_SECRET" ``` - 替换 `YOUR_CORPID` 和 `YOUR_SECRET`(企业微信管理后台获取) - 响应中提取 `access_token`(有效期为2小时) 2. **上传件到临时素材** ```batch curl -F "file=@C:\path\to\yourfile.zip" "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=TOKEN&type=file" ``` - 响应中获取 `media_id`(件唯一标识) 3. **转存到微盘指定位置** ```batch curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_create?access_token=TOKEN" ^ -H "Content-Type: application/json" ^ -d "{ \"spaceid\":\"SPACE_ID\", \"fatherid\":\"FOLDER_ID\", \"file_type\":1, \"file_name\":\"yourfile.zip\", \"media_id\":\"MEDIA_ID\" }" ``` - `spaceid`: 微盘空间ID(通过[获取空间API](https://work.weixin.qq.com/api/doc/90000/90135/93655)获得) - `fatherid`: 目标件夹ID(通过[列出件API](https://work.weixin.qq.com/api/doc/90000/90135/93657)获得) #### 完整批处理脚本示例 ```batch @echo off set CORPID=your_corpid set SECRET=your_secret set FILE_PATH=C:\backup\project.zip set SPACE_ID=xxxxxxxx set FOLDER_ID=xxxxxxxx :: 1. 获取access_token for /f "tokens=2 delims=:," %%a in ('curl -sG "https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=%CORPID%&corpsecret=%SECRET%" ^| findstr "access_token"') do ( set TOKEN=%%~a ) :: 2. 上传临时素材 for /f "tokens=2 delims=:," %%b in ('curl -s -F "file=@%FILE_PATH%" "https://qyapi.weixin.qq.com/cgi-bin/media/upload?access_token=%TOKEN%&type=file" ^| findstr "media_id"') do ( set MEDIA_ID=%%~b ) :: 3. 转存到微盘 curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/wedrive/file_create?access_token=%TOKEN%" ^ -H "Content-Type: application/json" ^ -d "{\"spaceid\":\"%SPACE_ID%\", \"fatherid\":\"%FOLDER_ID%\", \"file_type\":1, \"file_name\":\"%~nxFILE_PATH%\", \"media_id\":\"%MEDIA_ID%\"}" echo 件已上传至微盘指定位置! ``` #### 关键说明 1. **权限要求**: - 企业微信后台需开启「微盘API」权限 - 应用需配置 `wedrive` 相关权限范围 2. **路径参数获取**: - `spaceid` 通过[获取空间API](https://work.weixin.qq.com/api/doc/90000/90135/93655)获得 - `fatherid` 通过[列出件API](https://work.weixin.qq.com/api/doc/90000/90135/93657)获得 3. **件限制**: - 单件最大支持20MB - 仅支持企业微信认证件类型(zip/rar/7z等压缩格式) 4. **错误处理**: - API返回码非0表示失败(错误代码参考[官方档](https://work.weixin.qq.com/api/doc/90000/90139/90313)) - 建议添加重试机制和日志记录 > **注意**:首次使用需在企业微信后台「客户联系」>「API」中配置可信IP[^1] #### 替代方案 若需更稳定的方案,可考虑: 1. 使用Python等语言调用API(推荐[企业微信SDK](https://github.com/wechatpy/wechatpy)) 2. 通过企业微信「机器人」Webhook发送件 3. 使用官方[企业微信桌面客户端](https://work.weixin.qq.com/)的自动同步功能
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值