美好的一天!
我收到此错误:
SQL STATE 37000 [Microsoft] [ODBC Microsoft Access驱动程序]语法错误 或尝试运行嵌入式SQL语句时访问冲突 的PowerScript。
我正在使用MsSQL Server 2008和PowerBuilder 10.5,操作系统是Windows 7.我能够确定导致问题的其中一个查询:
SELECT top 1 CONVERT(DATETIME,:ls_datetime)
into :ldtme_datetime
from employee_information
USING SQLCA;
if SQLCA.SQLCODE = -1 then
Messagebox('SQL ERROR',SQLCA.SQLERRTEXT)
return -1
end if
通过使用PowerBuilder的datetime()
功能,我能够找到解决方案。但是程序的其他部分导致了这一点,我很难确定程序的哪个部分导致这个问题。我发现这非常奇怪,因为我在dev-pc
中运行相同的脚本完全没有问题,但是当我尝试在客户端的工作站上运行程序时,我收到了这个错误。我在工作站和dev-pc
中没有发现任何差异。我也尝试按照here的说明操作,但问题仍然存在。
更新:我能够识别导致问题的另一个脚本:
/////////////////////////////////////////////////////////////////////////////
// f_datediff
// Computes the time difference (in number of minutes) between adtme_datefrom and adtme_dateto
////////////////////////////
decimal ld_time_diff
SELECT top 1 DATEDIFF(MINUTE,:adtme_datefrom,:adtme_dateto)
into :ld_time_diff
FROM EMPLOYEE_INFORMATION
USING SQLCA;
if SQLCA.SQLCODE = -1 then
Messagebox('SQL ERROR',SQLCA.SQLERRTEXT)
return -1
end if
return ld_time_diff
似乎传递datetime变量会导致上面的错误。其他脚本工作正常。
答案 0 :(得分:0)
答案 1 :(得分:0)
第一个语句中的错误应该是CONVERT函数的第二个参数。 它的类型不是字符串,它的类型是有效的表达式 https://docs.microsoft.com/en-us/sql/t-sql/functions/cast-and-convert-transact-sql
所以我希望你的
CONVERT(DATETIME,:ls_datetime)
将评估为
CONVERT(DATETIME, 'ls_datetime')
但它应该是
CONVERT(DATETIME, DateTimeColumn)
您的第二个陈述中的错误可能是您提供了错误的日期时间格式。 因此,请在使用此功能时检查是否仍出现错误 https://docs.microsoft.com/en-us/sql/t-sql/statements/set-dateformat-transact-sql
使用正确的日期时间格式