c++ - 带有 "partition by"的准备好的语句对 Sybase IQ 不起作用?

标签 c++ sql sybase-asa

我在使用准备好的语句查询 Sybase IQ 时遇到问题。当我将整个查询键入为文本然后在不带参数的情况下对其调用 PrepareStatement 时,查询工作正常。但是当我坚持一个参数时,我会返回错误,即使我的 sql 是正确的。知道为什么吗?

此代码运行良好并运行我的查询:

errorquery<<"SELECT   1   as foobar \
        ,       (SUM(1) over (partition by foobar) )      as myColumn  \
        FROM spgxCube.LPCache lpcache   \
                WHERE    lpcache.CIG_OrigYear = 2001    "; 


odbc::Connection* connQuery= SpgxDBConnectionPool::getInstance().getConnection("MyServer");
PreparedStatementPtr pPrepStatement(connQuery->prepareStatement(errorquery.str()));
    pPrepStatement->executeQuery();

但这是完全相同的事情,只是我没有在代码中直接输入“2001”,而是用一个参数插入它:

    errorquery<<"SELECT   1   as foobar \
        ,       (SUM(1) over (partition by foobar) )      as myColumn  \
        FROM spgxCube.LPCache lpcache   \
                WHERE    lpcache.CIG_OrigYear = ?    "; 

    odbc::Connection* connQuery = SpgxDBConnectionPool::getInstance().getConnection("MyServer");
    PreparedStatementPtr pPrepStatement(connQuery->prepareStatement(errorquery.str()));

    int intVal = 2001;
    pPrepStatement->setInt(1, intVal);

    pPrepStatement->executeQuery();

这会产生这个错误: [Sybase][ODBC 驱动程序][Adaptive Server Anywhere]'(SUM(1) over(partition by foobar)) as myColumn'附近的无效表达式

知道为什么第二个失败时第一个有效吗?是否不允许将“分区依据”与插入的 sql 参数或类似的东西一起使用?

最佳答案

Sybase (ASA) Adaptive Server Anywhere 错误正常,IQ DB 中包含一个 Sybase ASA 实例,用于 SYSTEM 空间。

我不知道 Sybase IQ v12.7 之前的版本是否支持/完全支持分区依据。我记得在 v12.6 下遇到过问题。在 v12.7 或更高版本下它应该没问题,否则你的命令对我来说看起来不错。

关于c++ - 带有 "partition by"的准备好的语句对 Sybase IQ 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1088006/

相关文章:

php - Wordpress - 首先查询自定义帖子类型的名称

odbc - 有没有办法在不部署 ODBC 或 OLEDB 驱动程序的情况下使用 Powerbuilder 连接到 ASA 数据库?

c++ - 这是标准的 C++ 代码吗?

c++ - 不允许对自定义类型进行多次隐式转换?

c++ - 多进程同步的输出流锁定?

tcp - 私有(private)化与 SQL Anywhere 16 数据库的连接

sybase - 如何清除sybase 15.7中的事务日志?

c++ - Stringstream 没有输入添加了结束符的字符串

sql - django orm queryset - 如何执行sql查询MIN/MAX FILTER

sql - 在 SQL Server Management Studio 中编辑表后保存更改