0

我正在尝试执行以下 SQL 语句(在 SQL Server 2005 中构建和测试)

 Select *
 From mytesttable
 where myPk in
 (
      select t3 from (
          select field1, substring(field3, charindex(":", field3),6) t2, min(mypk) t3
          from mytesttable
          group by field2, substring(field3, charindex(":", field3),6)
      ) t
  ) 

我知道我不能使用子字符串或字符索引。所以最里面的选择在vbs中是这样的:

strsql = "select mid(field3, instr(1, field3, ":")), min(mypk) from "
strsql = strsql & myCSVFileName 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")) "

这运行良好。

但是当我尝试添加下一个选择来包装最内部的选择时,它会失败。代码如下所示:

strsql = "select mypk from ( select mid(field3, instr(1, field3, ":")), min(mypk)     from "
strsql = strsql & myCSVFileName 
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ":")) )"

我得到的错误信息是有

没有为一个或多个必需参数指定值

有什么建议么?谢谢。

4

2 回答 2

1

Jet不知道,但是在SQL Server等平台,派生表必须有别名。换句话说,你需要

... FROM (select ... ) AS YouMustProvideAnAliasForThisDerivedTable

每次提到列时也要小心使用相同的大小写(mypk 与 myPk),尽管这似乎不是问题所在。

于 2012-05-10T15:56:06.153 回答
0

您的字符串中有一些错误,但在 Jet 中不需要为派生表提供别名。

您已经使用 csv 名称重复了该行,在应该使用单引号或两个双引号时使用了双引号,并且您没有返回名为 mypk 的字段。这对我有用,但前提是字段 3 始终包含带有冒号的文本。

myCSVFileName = "Table.csv"
strsql = "select pk from ( select mid(field3, instr(1, field3, ':')), min(mypk) as pk from "
strsql = strsql & myCSVFileName & " GROUP By mid(field3, instr(1, field3, ':')) )"
于 2012-05-11T13:35:28.847 回答