【发布时间】:2018-05-06 10:24:12
【问题描述】:
这是我的简单查询:
my $SQLp = "SELECT MAX([PawnPayments].[CreationTimeDate]) as MaxTransDate
FROM [PawnSafeDBCE].[dbo].[PawnPayments]
INNER JOIN [PawnSafeDBCE].[dbo].[PawnPaymentDetails]
ON [PawnPayments[.[PaymentID] = [PawnPaymentDetails].[PaymentID]
WHERE [PawnPaymentDetails].[TicketID[ = '$TicketID'
AND [PawnPaymentDetails].[StoreID] ='$StoreID'
请注意,查询是在 Perl 引擎上编写的。我不断收到一条错误消息:
“您的 SQL 语法有错误;请查看与您的 MySQL 服务器版本对应的手册,了解在 '[PawnPayments].[CreationTimeDate]) as MaxTransDate 附近使用的正确语法:”
我认为错误与括号表示法有关,但不幸的是,由于第 3 方表的构造不佳,我不得不使用这种样式。有什么帮助吗?我错过了什么明显的东西吗?
巨大的编辑:我正在查询的表实际上是在 SQL 服务器上,而不是 MySQL 服务器上!我的数据库在 MySQL 服务器上运行,但这个第 3 方数据库在旧版本的 Microsoft SQL 上运行。
【问题讨论】:
-
您正在 MySQL 服务器上尝试 SQL-server 语法。括号是 SQL-server 的转义方法。而 dbo 是一个只能在 SQL 服务器中工作的对象......而且你的代码看起来很容易受到 SQL 注入的攻击
-
仅当您希望它工作时。
-
您的错误信息清楚地表明了 MySQL。因此,无论您认为哪里涉及到 MSSQL 服务器,您都不是在与它交谈。另外,不要将变量放入您的 SQL 中。请改用 DBI 的占位符。
-
如果您使用的第 3 方软件仅支持 Microsoft SQL Server,并且无法配置为使用标准标识符分隔符(如 SET QUOTED IDENTIFIER),则无法将其与 MySQL 一起使用.
-
我还看到您的查询有另一个 Microsoft SQL Server 功能:
[PawnSafeDBCE].[dbo].[PawnPayments]使用Database.Schema.Table表示法(请参阅docs.microsoft.com/en-us/dotnet/framework/data/adonet/sql/…),但 MySQL 不支持。 MySQL 仅支持schema.table。因此,即使您修复了方括号,您的查询也无法在 MySQL 上运行。
标签: mysql sql-server perl delimiter