我需要执行一个简单的查询:
SELECT * FROM MyTable WHERE Id IN (:ids)
显然,它返回给定列表中具有主键“Id”的记录集。如何将整数 ID 数组传递给参数“ids”的 ADOQuery.Parameters?我试过 VarArray - 它不起作用。默认情况下,参数“ids”具有 FieldType = ftInteger,如果重要的话。
我需要执行一个简单的查询:
SELECT * FROM MyTable WHERE Id IN (:ids)
显然,它返回给定列表中具有主键“Id”的记录集。如何将整数 ID 数组传递给参数“ids”的 ADOQuery.Parameters?我试过 VarArray - 它不起作用。默认情况下,参数“ids”具有 FieldType = ftInteger,如果重要的话。
没有可用于将值列表传递给的参数类型in
。不幸的是,这是参数化 SQL 的缺点之一。
您必须从代码构建查询以生成值列表,或生成可以从代码填充的参数列表。这是因为您可以将每个值作为不同的参数传递,如下所示:
SELECT * FROM MyTable WHERE Id IN (:id1, :id2, :id3)
但由于该列表可能具有可变大小,因此您必须更改 SQL 以添加参数。在这种情况下,生成值列表同样容易,尽管参数化查询可能会被更好地缓存,具体取决于您使用的数据库。
IN 参数只接受一个逗号分隔的值字符串,例如 (1,2,3,4,5) 所以我假设您将数据类型设置为 ftstring 并构建字符串并传递它...?没试过,但这是我会尝试的......