Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效

Posted

技术标签:

【中文标题】Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效【英文标题】:Query (SQL Server 2008 Express) works in SQL Server Management Studio but not in Delphi using ADODB 【发布时间】:2010-10-04 13:44:47 【问题描述】:

我有以下疑问:

WITH cte AS (
    SELECT
        windowId, frameIndx, elemIndx, comment, 
        ROW_NUMBER() OVER (PARTITION BY frameIndx ORDER BY elemIndx DESC)
    AS
        rn
    FROM
        dbo.translations
    WHERE
        windowId = 1 AND frameIndx IN (
            SELECT
                indx
            FROM
                dbo.translations_window
            WHERE program_id = 1 AND active = 1
    )
)
SELECT
    windowId, frameIndx, elemIndx, comment
FROM
    cte
WHERE
    rn = 1

在使用管理工作室的 SQL Server 2008 R2 Developer(无论如何)、SQL Server 2005 Express 和 SQL Server 2008 R2 Express 中运行时,查询执行没有问题(这适用于最后两个)。但是,一旦我尝试使用 Delphi 的 ADODB 执行此查询,我就会收到一条错误消息。

Incorrect syntax near the keyword WITH

在 SQL 的快速版本中是否不允许此类查询?查询中有什么问题?客户端使用 SQL express,所以我需要找到一个在 express 版本中运行的解决方案。

【问题讨论】:

听起来 ADODB 不支持这个... 【参考方案1】:

我不知道它是否有帮助,但您可以在查询前尝试put a semicolon:

; WITH cte AS (
...

【讨论】:

所以 4 票赞成和接受.... Sambatyon 是否确认这可以解决问题?如果是这样,我也会投票。 我可以确认这是在 ADODB 查询中使用 CTE 所必需的。 我见过的大多数使用 CTE 的文档都建议添加 ;在 with 之前,基本上是“to be sure to be sure”。

以上是关于Query (SQL Server 2008 Express) 在 SQL Server Management Studio 中有效,但在 Delphi 中使用 ADODB 无效的主要内容,如果未能解决你的问题,请参考以下文章

SQL Query (SQL Server 2008) 从两个表中检索数据并对结果进行分组

Excel 2007 MS Query 中的多部分标识符错误,但 SQL Server 2008 中没有

SQL Server 2008R2 用户定义函数(表值)性能

优化 SQL Server 2008 查询

如何将数据从Excel电子表格导出到Sql Server 2008表

在Win7 64位电脑上安装Sql Server 2008 R2 Express