0

我在工作中使用 SAP B1,并希望以批处理文件的形式导出 CSV 文件,以便我可以安排每 15 分钟导出一次以上传到网站。

这就是我目前所拥有的:

SQLCMD -S SERVER-VMSQL -d SBO_COMPANYNAME -U sa -P adminpassword -Q "SELECT ItemCode, FrgnName, OnHand-IsCommited FROM OITM" -s "," -o "\\server-address\users\rick\TestBat.csv" -h-1 -s"," -W -w 999

这给了我一个带有列的 CSV 导出:

  • 项目代码
  • 项目名
  • 现有数量减去销售订单数量

我需要详细说明这个查询以放入一些 WHERE 子句 - 例如 WHERE:

  • U_Category = 'Toys'(其中 U_Category 是用户定义的字段)
  • Qrygroup2 = 'Y'

以上所有字段都在 OITM 表中。

另外 - 你如何使用 SQLCMD 查询连接表?我需要能够加入 OITW 表才能在 WHERE 子句中指定 T1.[WhsCode] = '01. 主要的'。

任何帮助将不胜感激!

问候瑞克

4

2 回答 2

0

没有什么可以阻止您在提供给 SQLCMD 的查询中使用WHEREJOIN子句。它们只是常规的 SQL 查询。

例如,这里是您提供的查询修改为包含您指定的限制:

SELECT OITM.ItemCode, OITM.FrgnName, OITM.OnHand-OITM.IsCommited
FROM OITM
   INNER JOIN OITW
       ON OITW.ItemCode = OITM.ItemCode
WHERE OITM.U_Category = 'Toys'
    AND OITM.Qrygroup2 = 'Y'
    AND OITW.WhsCode = '01. Main'

您只需将此查询提供给 SQLCMD,就像您对 OP 中的查询所做的那样:

SQLCMD -S SERVER-VMSQL -d SBO_COMPANYNAME -U sa -P adminpassword -Q "SELECT OITM.ItemCode, OITM.FrgnName, OITM.OnHand-OITM.IsCommited FROM OITM INNER JOIN OITW ON OITW.ItemCode = OITM.ItemCode WHERE OITM.U_Category = 'Toys' AND OITM.Qrygroup2 = 'Y' AND OITW.WhsCode = '01. Main'" -s "," -o "\\server-address\users\rick\TestBat.csv" -h-1 -s"," -W -w 999
于 2014-05-15T05:48:00.930 回答
0

你能澄清一下你想要做的更多吗?我已经编写了 VB.NET 代码并制作了批处理文件,以使用 Windows 任务调度程序每 x 分钟执行一次该代码。

您提到了 OITM 表,但还需要考虑 ITM1 表,我发现在同一个查询中加入这两个表通常会给我所需的一切(就数据而言)以应用正确的 where 子句进行验证。

再次,很抱歉没有完全理解你的问题,但如果你能详细说明这个问题,我很乐意尽我所能提供帮助。

卡尔。

于 2014-01-29T12:06:55.543 回答