本文介绍如何在 Microsoft Dynamics GP 中将日期和时间从 Dexterity 传递到 Microsoft SQL Server。
适用于: Microsoft Dynamics GP
原始 KB 数: 929786
简介
确保传递给 SQL Server 的日期和时间的格式与计算机区域设置中指定的格式不冲突。 在 Dexterity 中编写 pass-through SQL 语句或 Range Where 子句,或调用存储过程时,确实如此。
SQL Server 可识别以下格式的日期:
- YYYYMMDD
- MM/DD/YYYY
注意
在这些格式中,YYYY 表示四位数年份,MM 表示两位数月份,DD 表示两位数的日期。
SQL Server 可识别以下格式的时间:
- HH:MM:SS (24 小时时间格式)
- HH:MM:SS XX (12 小时时间格式)
注意
- 在这些格式中,HH 表示两位数小时,MM 表示两位数分钟,SS 表示两位数秒。
- 在 12 小时制格式中,将 XX 替换为 AM、am、PM 或 pm。
可以使用 str() 函数将日期或时间转换为字符串值。 然后,此字符串值将传递给 SQL Server。 在这种情况下,计算机的区域设置确定传递给 SQL Server 的字符串值的格式。 因此,可能会出现以下行为:
如果在计算机的区域设置中指定了 DD/MM/YYYY 日期格式,则传递给 SQL Server 的日期在每月的前 12 天不正确。 此外,在每月的每一天,SQL Server 将生成以下 SQL 错误 241 消息:
从字符串转换日期/时间的语法错误。
如果计算机的区域设置中同时指定了 12 小时时间格式以及除了“AM”、“am”、“PM”或“pm”以外的缩写,则 SQL Server 将生成以下 SQL 错误 241 消息:
从字符串转换为日期时间格式时出现语法错误。
备注
例如,如果计算机的区域设置中指定了 12 小时时间格式以及 A.M. 或 下午 ,SQL Server 将生成此消息。
将日期从 Dexterity 传递到 SQL Server
若要从 Dexterity 将日期传递给 SQL Server,请使用 sqlDate 函数而不是 str() 函数。 sqlDate 函数内置于 Microsoft Dynamics GP 中。 若要设置日期的格式,可以在编写的代码中调用此函数。
注意
sqlDate 函数不会在将日期传递给 SQL Server 时添加所需的单引号。 因此,使用单引号将函数的结果括起来。
将时间从 Dexterity 传递到 SQL Server
Microsoft 提供的编程示例仅用于进行说明,而不提供明示或默示担保。 包括但不限于适销性或针对特定用途的适用性的默示保证。 本文假设你熟悉正在演示的编程语言和用于创建和调试过程的工具。 Microsoft 支持工程师可以帮助解释特定过程的功能。 但是,它们不会修改这些示例,以提供添加的功能或构造过程以满足你的特定要求。
若要从 Dexterity 将时间传递给 SQL Server,必须使用创建的函数而不是 str() 函数。 因为 Microsoft Dynamics GP 没有一个如 sqlDate 函数一样格式化日期的时间格式化函数,所以您必须创建一个函数。
下面的代码示例创建一个 sqlTime 函数,该函数将时间传递给 SQL Server。
{ Global Function : sqlTime }
function returns string OUT_String;
in time IN_Time;
OUT_String = pad(str(hour(IN_Time)), LEADING, CH_0, 2) + CH_COLON +
pad(str(minute(IN_Time)), LEADING, CH_0, 2) + CH_COLON +
pad(str(second(IN_Time)), LEADING, CH_0, 2);
有关详细信息,请参阅 如何在 Microsoft Great Plains Dexterity 中编写“Passthrough”SQL 语句和“Range Where”子句。