需要学习如何使用 SQLCMD 从 SAP B1 导出查询

Posted

技术标签:

【中文标题】需要学习如何使用 SQLCMD 从 SAP B1 导出查询【英文标题】:Need to learn how to use SQLCMD to export a query from SAP B1 【发布时间】:2014-01-28 12:57:30 【问题描述】:

我在工作中使用 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.主要'。

任何帮助将不胜感激!

问候 瑞克

【问题讨论】:

【参考方案1】:

没有什么可以阻止您在提供给 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

【讨论】:

【参考方案2】:

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

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

再次,很抱歉未能完全理解您的问题,但如果您能详细说明该问题,我很乐意尽我所能提供帮助。

卡尔。

【讨论】:

嗨,Cal,很抱歉,花了这么长时间才知道。基本上我想做的就是从我的 SAP B1 SQL 数据库中导出一个包含上述信息的 CSV 文件。真正的问题是获取特定仓库的现有数量和承诺数量。

以上是关于需要学习如何使用 SQLCMD 从 SAP B1 导出查询的主要内容,如果未能解决你的问题,请参考以下文章

SAP B1 如何与SAP R3 EDI 交换数据

如何在SAP B1 SDK中使用Invoke()函数?

从 C# 启动 sqlcmd 时如何检索错误?

SAP B1可以过渡到R3顾问么?

小企业用sap b1的产品好吗?效果怎么样?

外挂系统 -减少SAP B1用户许可数, 多点操作及时同步SAP