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 无效的主要内容,如果未能解决你的问题,请参考以下文章