使用JET.OLEDB驱动程序对csv文件执行sql select语句

时间:2012-05-10 14:50:53

标签: sql-server-2005 jet subquery

我正在尝试执行以下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
  ) 

我知道我不能使用substring或charindex。所以最里面的选择在vbs中看起来像这样:

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

这很好。

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

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, ":")) )"

我得到的错误信息是

  

没有给出一个或多个必需参数的值

有什么建议吗? 谢谢。

2 个答案:

答案 0 :(得分:1)

我不知道Jet,但在SQL Server和其他平台中,派生表必须是别名。换句话说,你需要

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

每次提到一个专栏(mypk vs. myPk)时也要小心使用相同的外壳,尽管这似乎不是问题所在。

答案 1 :(得分: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, ':')) )"