1

假设我有一个非常简单的表:

CREATE TABLE Bands (Name VARCHAR(20) NOT NULL) ENGINE = INNODB;
INSERT INTO Bands VALUES ('Hammerfall'), ('Helloween'), ('Haggard'),
                         ('Therion'), ('Tarja');

并运行查询:

SET @i := 0;
SELECT @i := @i + 1 No, Name
FROM Bands
WHERE Name LIKE 'H%'

在 HeidiSQL 和 PhyMyAdmin 上运行良好:

1 Hammerfall
2 Helloween
3 Haggard

但在 Delphi 2009 中失败并出现错误

SQL 错误:您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 'SELECT @i := @i + 1 No, Name FROM Bands WHERE Name LIKE 'H%' 附近使用正确的语法

我在 TZQuery.SQL 框中编写查询,Query .SQL.Text 和Query .SQL.Add()。都失败了。

有没有办法运行该查询?

我将使用的真正查询是加入一些 20 多列的表以生成一些报告。但我什至不能让这个小东西起作用~~

4

1 回答 1

2

正如评论者所说,问题是双重的。

  1. 您不能在单个 SQL 中执行 2 条语句(这是对 SQL 注入的保护)。

  2. 你不能使用:if TQuery.CheckParams = true

请注意,让 InnoDB 表没有显式主键是一个坏主意。
问题是,如果您不创建 PK,MySQL 将为您创建一个隐藏的 PK,这会降低连接性能。

如果您希望 InnoDB 高效运行,建议创建

integer primary key auto_increment

每个表中的字段。

于 2013-02-27T18:45:25.343 回答