gpt4 book ai didi

sql-server - 动态 AX 2012 : Conversion failed when converting date and/or time from character string

转载 作者:行者123 更新时间:2023-12-03 16:35:35 25 4
gpt4 key购买 nike

在 AX 中,我有几个实体。当我尝试发布未发布的时间表时,它适用于所有实体,但出现 SQL 错误的实体除外:“从字符串转换日期和/或时间时转换失败”

调用堆栈如下:

enter image description here

在突出显示的方法中,我看到它在 AccountDistribution 表中找不到任何 SourceDocumentHeader,因此 AccountingDate 为空。

有没有人遇到过同样的问题并知道如何解决?
这对我来说很奇怪,因为所有其他实体都可以正常工作。

谢谢。

最佳答案

您所看到的技术解释是这部分代码生成了无效的 SQL,但在我看来,您的设置似乎有问题。

如果在空日期上运行 date2str,它将返回一个空字符串。请在工作中尝试此操作,您将在信息日志中看到一个空字符串。

static void TestEmptyDate(Args _args)
{
AccountingDate _date;
;
info(date2str(_date, 321, 2, 3, 2, 3, 4, DateFlags::None));
}

然后在方法 updateDistributionsForEvent 中连接起来生成一条 SQL 语句:
sqlStatementText = strFmt('UPDATE T1 SET ACCOUNTINGEVENT=%1,RECVERSION=%2 FROM ACCOUNTINGDISTRIBUTION T1 WITH (INDEX(I_7452SOURCEDOCUMENTHEADERIDX)) CROSS JOIN SOURCEDOCUMENTLINE T2 ', _accountingEventRecId, xGlobal::randomPositiveInt32());

sqlStatementText += strFmt('WHERE (((T1.PARTITION=%1) AND (T1.ACCOUNTINGEVENT=0) AND (T1.ACCOUNTINGDATE={ d\'%2\'})) AND (T1.SOURCEDOCUMENTHEADER=%3)) AND ', getcurrentpartitionrecid(), sqlDate, _sourceDocumentRecId);
sqlStatementText += strFmt('((T2.RECID=T1.SOURCEDOCUMENTLINE) AND (T2.ACCOUNTINGSTATUS=%1 OR T2.ACCOUNTINGSTATUS=%2)) AND (T2.PARTITION=%3)', enum2int(SourceDocumentLineAccountingStatus::Completed), enum2int(SourceDocumentLineAccountingStatus::Canceled), getcurrentpartitionrecid());

哪里 T1.ACCOUNTINGDATE={ d\'%2\'}是生成 T1.ACCOUNTINGDATE={ d''} 的相关部分在 SQL 字符串中。

如果你尝试运行
select  {d''}

在 SQL 中你会得到

Msg 241, Level 16, State 3, Line 1 Conversion failed when converting date and/or time from character string.



因为空字符串无法解析为日期。

关于sql-server - 动态 AX 2012 : Conversion failed when converting date and/or time from character string,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32860452/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com